Patrick: Datei aus geschütztem Verzeichnis lesen

Hi Forum,

wie kann ich mittels PHP eine Datei aus einem mit htaccess geschützten Verzeichnis lesen und ausgeben?
z.B. bei PDFs.

Danke
Patrick

  1. hi,

    wie kann ich mittels PHP eine Datei aus einem mit htaccess geschützten Verzeichnis lesen und ausgeben?

    Du redest vom Zugriff über HTTP?
    In dem du die Auth-Daten mitgibst.

    http://www.php.net/manual/de/wrappers.http.php

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hi wahsaga,

      nein, eigentlich nicht.
      PHP soll die Datei direkt einlesen, quasi ohne Link.
      Nur auf Filebasis.

      Du redest vom Zugriff über HTTP?
      In dem du die Auth-Daten mitgibst.

      Grüße
      Patrick

      1. Hi,

        nein, eigentlich nicht.
        PHP soll die Datei direkt einlesen, quasi ohne Link.
        Nur auf Filebasis.

        Dann interessiert auch kein htacces oder sonstwas.

        readfile
        include
        require
        file_get_contents
        ...etc.

        carpe diem
        Pia

        1. Das stimmt. Solange das Script und das geschuetze Verzeichnis dem gleichen Server gehoeren... Ich hab hier den Verdacht, dass dem nicht so ist, oder?

  2. Hallo Patrick!

    Du willst sicherlich aus einem geschützen Verzeichnis Dateien zum Download anbieten, die nur von angemeldeten Usern herunter geladen werden können. Das könntest Du auch über einen htaccess Zugriffsschutz erreichen. Wesentlich aufwändiger weil sicherheitskritischer könntest Du es über PHP ausliefern. Also lesen, header basteln und ab damit. Beachte meine Anmerkung am Ende.

    Überprüfen ob das File da ist:
    file_exists($filename)

    Fileextension und Content Type bestimmen
    $file_extension = strtolower(substr(strrchr($filename,"."),1));
    switch ($file_extension) {
        case "pdf": $ctype="application/pdf"; break;
        case "exe": $ctype="application/octet-stream"; break;
        case "zip": $ctype="application/zip"; break;
        case "doc": $ctype="application/msword"; break;
        case "xls": $ctype="application/vnd.ms-excel"; break;
        case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
        case "gif": $ctype="image/gif"; break;
        case "png": $ctype="image/png"; break;
        case "jpe": case "jpeg":
        case "jpg": $ctype="image/jpg"; break;
        default: $ctype="application/force-download";
    }

    Diverse Header setzen:
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false);
    header("Content-Type: $ctype");
    header ("Content-Disposition: attachment; filename=$filename");
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".@filesize($filename));
    set_time_limit(0);
    @readfile("$filename") or die("Keine Datei");

    Unbedingt daran denken, dass Du sicher gehen musst, dass keine anderen Verzeichnisse als das von Dir gewünschte vom Script aufgerufen werden kann. Am besten mit einer Positivliste.

    Schönen Gruß
    Afra