bilder nur downloaden, nicht anzeigen...

Von: , Frage gestellt am Fr, 21. Mär 2008

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)

5 Antworten zu dieser Frage

  1. Antwort von nach 14 Stunden 0 hilfreich
    Re: 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.
    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.

    • Antwort von nach 16 Stunden 0 hilfreich
      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^^)

  2. Antwort von nach 23 Stunden 0 hilfreich
    Re: bilder nur downloaden, nicht anzeigen...

    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: <meta http-equiv="Content-type" content="text/hmtl; charset=utf-8">).

    • Antwort von nach einem Tag 0 hilfreich
      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...

      • Antwort von nach 5 Tagen 0 hilfreich
        Re: danke, aber...

        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...

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!