Bilder nur downloaden, nicht anzeigen

Hallo zusammen!
Ich bin ein absoluter Neuling in Sachen PHP, und hab deshalb folgende frage:
Angenommen ich speichere Bilder in einem bestimmten Ordner auf meinem Webserver.
Wenn ich jetzt folgende URL eingebe
www.[meineseite].de/[ordner]/1.jpg
ich also irgendein Bild in diesem Ordner öffnen möchte, ich nicht die möglichkeit habe mir dieses Bild im Browser anzugucken, sondern direkt eine Downloadaufforderung bekomme. (Hab ich schon bei mehreren Seiten so gesehen).
Wenn das nicht per PHP möglich ist hab ich folgenden „Kompromiss“. Ich hab mich ein bisschen schlau gemacht und folgendes kommt meiner Bitte relativ nahe. Das einzige Problem ist eigentlich nur noch das ich bei der else anweisung nicht den Text „Datei nicht verfügbar“ angezeigt bekommen möchte, sondern das Bild error.png, welches im gleichen Ordner liegt.

$erlaubt = array("1.jpg", "datei\_2.txt", "datei\_3.mov");

if (in\_array($\_GET[file], $erlaubt)){
header("Content-type: application/octet-stream"); 
header("Content-Disposition: attachment; filename=".$\_GET[file]);
readfile($\_GET[file]);
}else{
die("Datei nicht verfügbar");
}
?\>

(noch nebenbei, mit welcher Codierung muss ich eine php datei im editor speichern? Bei mir kommt als Standard immer ANSI)

Hallo zusammen!
Ich bin ein absoluter Neuling in Sachen PHP, und hab deshalb
folgende frage:
Angenommen ich speichere Bilder in einem bestimmten Ordner auf
meinem Webserver.
Wenn ich jetzt folgende URL eingebe
www.[meineseite].de/[ordner]/1.jpg
ich also irgendein Bild in diesem Ordner öffnen möchte, ich
nicht die möglichkeit habe mir dieses Bild im Browser
anzugucken, sondern direkt eine Downloadaufforderung bekomme.
(Hab ich schon bei mehreren Seiten so gesehen).
Wenn das nicht per PHP möglich ist hab ich folgenden
„Kompromiss“. Ich hab mich ein bisschen schlau gemacht und
folgendes kommt meiner Bitte relativ nahe. Das einzige Problem
ist eigentlich nur noch das ich bei der else anweisung nicht
den Text „Datei nicht verfügbar“ angezeigt bekommen möchte,
sondern das Bild error.png, welches im gleichen Ordner liegt.

Hallo Ernie,

wieso hast Du keine Möglichkeit Dir ein Bild anzusehen? Das sollte jederzeit in einem Browser möglich sein.

Bei Deinem Code ist auf jeden Fall eine Klammer ) zuviel bei der if-Abfrage, korrekt wäre:

$erlaubt = array("1.jpg", "datei\_2.txt", "datei\_3.mov");

if (in\_array($\_GET[file], $erlaubt){
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment;
filename=".$\_GET[file]);
readfile($\_GET[file]);
}else{
die("Datei nicht verfügbar");
}
?\>

Tritt der Fehler danach noch immer auf?

MfG Georg V.

Nein…^^

wieso hast Du keine Möglichkeit Dir ein Bild anzusehen? Das
sollte jederzeit in einem Browser möglich sein.

Du hast mich missverstanden, DERJENIGE der auf das Bild zugreift soll nicht die möglichkeit haben das direkt anzusehen^^
(Ich kann mir ja das Bild anschauen^^)

Hallo,

Das einzige Problem
ist eigentlich nur noch das ich bei der else anweisung nicht
den Text „Datei nicht verfügbar“ angezeigt bekommen möchte,
sondern das Bild error.png, welches im gleichen Ordner liegt.

}else{

header(„Content-type: image/png“);
readfile(„error.png“);

}
?>

(noch nebenbei, mit welcher Codierung muss ich eine php datei
im editor speichern? Bei mir kommt als Standard immer ANSI)

PHP ist das reichlich egal, das benutzt für Funktionsnamen, etc. nur 7bit. Wenn du HTML Code, Ausgaben, etc. direkt in der PHP Datei stehen hast, musst du die Codierung nehmen, die du für deine Ausgabe definiert hast, also im Kopf der HTML Ausgabe oder aber in den Webserver-Einstellungen angegeben hast (Apache: AddDefaultCharset, in HTML: ).

danke, aber…
Ja das funktioniert schonmal, danke!
Aber wie geht denn das jetzt das der das auch macht wenn ich direkt aufs bild linke
also zB.
images/1.jpg
dass dann die downloadaufforderung kommt und nicht das bild im explorer geöffnet wird…

images/1.jpg
dass dann die downloadaufforderung kommt und nicht das bild im
explorer geöffnet wird…

Da musst du an der Webserver-Konfiguration „drehen“ (.htaccess mit ForceType application/octed-stream in dem Verzeichnis) oder aber /images/*.jpg per mod_rewrite mit der T Option auf den Typ setzen…

Hat mit PHP nicht mehr so viel zu tun…