echo $begrüßung;
Wie ich auch schon Sven versucht habe zu erklären,
kommt man hier nicht mit Readfile weiter (insbesondere war ich der
erste in diesem Thread hier der darauf hingewiesen hat).
Deine Umkopierlösung wirft mehr Probleme auf, als sie löst. Diese wurden sowohl von Sven als auch von mir angesprochen.
Nochmal langsam und von vorn, das was ich dir versuchte stattdessen zu verwenden:
Ein Script seite_mit_bild.php liefert den HTML-Quelltext aus, der unter anderem einen Verweis auf eine Bild-Ressource enthält <img src="bildleser.php?zielbild=wasauchimmer.jpg">.
Bei dir würde seite_mit_bild.php nun noch einen Kopiervorgang auslösen, der wasauchimmer.jpg für eine gewisse Zeitspanne öffentlich zugänglich macht, wenn seite_mit_bild.php die User-Prüfung erfolgreich absolviert hat. Statt <img src="bildleser.php?zielbild=wasauchimmer.jpg"> stünde <img src="tmp/wasauchimmer.jpg"> in deiner Ausgabe von seite_mit_bild.php.
In der bildleser-Lösung wird in bildleser.php ebenfalls die User-Prüfung vorgenommen und daraufhin das Bild wasauchimmer.jpg ausgeliefert oder ein Bild mit "Zugriff verweigert" als Inhalt. Dies geschieht mit den für das jeweilige Bildformat passenden HTTP-Headern, damit der Browser nicht raten muss, was da auf ihn zukommt. Die ausgelieferten Bild-Daten müssen dazu nicht irgendwo hinkopiert werden, sondern werden mit readfile() direkt auf die Anforderung von "bildleser.php?zielbild=wasauchimmer.jpg" durch den Browser ausgeliefert. Das Umkopieren und das damit verbundene Garbage-Collection-Problem entfällt. Nur die angesprochene Prüfung auf .. und / in dem statt "wasauchimmer.jpg" übergebenen Wert sollte eingebaut werden.
echo "$verabschiedung $name";