Maresa P.: Dateien schützen

Hallo,

ich möchte auf meinem Server in einem Verzeichnis Dateien hochladen, die der Öffentlichkeit nicht direkt zugänglich gemacht werden sollen. Die Dateien kommen also ausserhalb des htdocs Verzeichnis meines Apache Server hin.

Ich möchte die Dateien nun Usern, die sich vorher eingeloggt haben (UMS funktioniert komplett mit Php Sessions und MySql Datenbank) die Daten zur Verfügung stellen.

Es müsste doch möglich sein, eine Datei mittels PHP einzulesen (PHP hat ja Zugriff auf das komplette File System) und dann mit beiinflusstem HTTP Head an den Browser zu senden.

Ist das möglich?
Wo ist das beschrieben? Gibts ein Tutorial?
Wie realisiere ich sowas?

Vielen Dank

Maresa P.

  1. Hallo Maresa

    Wenn ich dich richtig verstehe, willst du einfach ein Verzeichniss per HTML einer bestimmten Benutzergruppe anzeigen.

    Wenn du ein Verzeichniss per .htaccess schützt, kannst du dann das Verzeichniss mittels PHP auslesen (opendir() und readdir()), und danach darstellen.

    Ein kleines skript:

    $verz = opendir($Pfad);
    while ($file = readdir($verz))
    {
      if($file != "." && $file != "..")
      {
        echo("$file<BR>\n");
      }
    }

    Die beiden Einträge . & .. stehen fürdie Übergeordneten Ordner.

    Gruss Reto

    1. Wenn du ein Verzeichniss per .htaccess schützt, kannst du dann das Verzeichniss mittels PHP auslesen (opendir() und readdir()), und danach darstellen.

      Hi!

      nein, Du verstehst mich leider nicht richtig. Ich will nicht nur ein Verzeichnisnamen oder einen Dateinmaen darstellen, sondern ich will eine Datei downloadbar machen, obewohl sie in einem nicht für die Öffentlichkeit Zugänglichen Verzeichnis liegt.

      Viele Grüße

      Maresa P.

      1. Nun...

        lies die Datei per PHP mit readfile ein. (Sorge selbstverständlich dafür, dass vor dieser Aktion noch keinerlei Ausgabe erfolgt ist, sonst kann der Header nicht gesendet werden.)

        Du nimmst vielleicht auch ein Script mit dem Namen "download" o.ä. (müsstest dann Apache aber noch mitteilen, dass er die ausführen soll - trotz keiner Dateierweiterung).

        Jedenfalls hast du den Inhalt dieser Datei $fname in einer Variablen, sagen wir $var. Dann kannst du ihn an den Browser senden (Micro$oft Internet Exploder benötigt einen speziellen Header msdownload:)

        $size = strlen($var);

        if (ereg("MSIE",$HTTP_USER_AGENT)) {
            header("Content-type: application/x-msdownload");
        }
        else {
            header("Content-type: application/octetstream");
        }

        header("Content-disposition: attachment; filename=$fname");
        header("Content-Length: ".$size);

        So.. hoffe, das klappt.

  2. hi,

    Wo ist das beschrieben? Gibts ein Tutorial?

    hier: http://www.dclp-faq.de/q/q-datei-download.html

    gruss,
    wahsaga