Hallo,
danke für die Warnungen! Ich wusste, da kommt noch was...
na klar, wir lassen die Leute ja hier nicht sehenden Auges in den Abgrund rennen. 😉
Dieses Kauderwelsch wird zu einem Bild, wenn du dem Browser auch noch mitteilst, dass es eins ist. Sende dazu als erste Anweisung im Script den Content-Type-Header image/jpeg.
Soll ja eben nicht!
Ähm, doch.
Die Bilder werden vom Script korrekt angezeigt. Nur eben nicht im Quelltext. Das ist okay.
Sie werden korrekt angezeigt, wenn sie aus einem HTML-Dokument heraus über ein img-Element abgerufen werden. Dann hat der Browser einen Kontext und kann entscheiden, dass der von dir gelieferte Content-Type text/html, den PHP als Defaultwert setzt, hier falsch sein muss. Das ist aber nicht garantiert, das ist browserabhängig. Der Browser könnte auch entscheiden: Da passt etwas nicht zusammen, ich biete die Ressource einfach zum Speichern an. Er könnte auch entscheiden, anstelle des fehlerhaften Bildes einfach das Icon für "broken image" anzuzeigen. Deswegen solltest du schon einen korrekten Content-Type senden.
session_start(); if(isset($_SESSION["user_xyz"])) { // User ist eingeloggt-darf auf Bilder zugreifen $name=$_GET["bild"]; if($name=="Suse"){ $datei="../bilder/klaus1.jpg"; }elseif($name=="winter"){ $datei="../bilder/sommer1.jpg; }elseif(etc.){ usw. }...{ ... }else{ $file="../forbidden.gif"; } }else{// User ist nicht eingeloggt $file="../forbidden.gif"; } Hier folgt der Code von Rolfs Hinweis
Wenn also php (if...) keinen gültigen Wert findet, wird forbidden.gif angezeigt.
Das ist gut. So werden alle nicht vorgesehenen Namen einfach abgeschmettert. Okay.
Anstelle der ellenlangen if-Kette würde ich aber ein Array bauen:
$AllowedImages =
[ "Suse": "klaus1.jpg",
"winter": "sommer1.jpg",
"hase": "igel.jpg"
];
Dann reicht ein Einzeiler als Abfrage:
$file = (isset(AllowedImages[$_GET['bild']]) ? AllowedImages[$_GET['bild']] : "forbidden.gif");
Einen schönen Tag noch
Martin
Demnächst vielleicht sogar olympisch: Bogenscheißen.