echo $begrüßung;
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.
Auch für dich noch einmal:
<html>
<head>
<title>Galeria</title>
</head>
<body>
<img src="bild1.jpg">
<img src="bild2.jpg">
<img src="bild3.jpg">
<img src="bild4.jpg">
</body>
</html>Sowas möchte er ausgeben, das geht nicht mit readfile().
Richtig. An dieser Stelle soll es ja auch gar nicht zum Einsatz kommen.
Entweder legt er seine Bilder öffentlich ab, dass er mittels bild1.jpg usw. darauf zugreifen kann, oder überlässt das Ausliefern einem Script, das den Dateiinhalt ausliefert.
Direkte Bildpfade gehen auch nicht, weil oberhalb von root.
Deswegen soll das Ausliefern der Bilddateiinhalte auch ein Script übernehmen, das auf dieses Oberhalb-Documentroot-Verzeichnis zugreifen darf.
<html>
<head>
<title>Galeria</title>
</head>
<body>
<img src="bildleser.php?zielbild=bild1.jpg">
<img src="bildleser.php?zielbild=bild2.jpg">
<img src="bildleser.php?zielbild=bild3.jpg">
<img src="bildleser.php?zielbild=bild4.jpg">
</body>
</html>
Und bildleser.php prüft auf Erlaubnis, liefert dann einen HTTP-Header, und mit einem readfile()-Zugriff auf
$Oberhalb_Documentroot_Verzeichnis . '/' . $_GET['zielbild']
den Inhalt der Bilddatei aus. (Hinzu kommt noch die Prüfung auf .. und / und auf Existenz der auszuliefernden Datei.)
echo "$verabschiedung $name";