Hello,
Wie würde das Script dann aussehen, finde es eine gute Möglichkeit, wüsste aber nicht, wie das zu realisieren wäre, ohne dass die Datei von aussen erreichbar ist. Wäre mega cool, wenn du es mir genauer erklären könntest.
Du möchtest also über HTTP auf Dateien zugreifen, die auf dem Filesystem des Webservers liegen. Dazu musst Du aus den Dateien ersteinmal HTTP-Ressourcen machen...
Am besten fängst Du vorne an:
Lege die Dateien außerhalb der Document Root im Filesystem des Webservers ab.
Gebe dem PHP-Prozess (lesenden) Zugriff auf die Verzeichnisse, in denen die Dateien liegen.
Bastel Dir eine Funktion, die ein solches Verzeichnis scannen kann und die Namen der (lesbaren) Dateien dem Browser anzeigen kann.
Mache aus der Anzeige der Namen valides HTML, z.B. eine formatierte Liste mit Links
scriptname.php?file=123
Wenn Du jetzt schon an Sicherheit denken willst, dann speicherst Du die Pfade der Dateien, die Du z.B. mit der Funktion glob() ausgelesen hast in einem Array in Deiner Session und lieferst jetzt nur einen Klartextnamen mit hintliegendem Link aus, wie ich ihn oben dargestellt habe. Das sorgt dafür, dass man nur auf Files zugreifen kann, die Du auch dafür freigegeben hast.
Wenn jetzt ein Request mit
http://example.org/scriptname.php?file=123
auf Deinem Webserver eintrifft, dann muss das Script scriptname.php wissen, dass es im Array in der Session nachgucken soll, ob unter dem Index 123 ein gültiger Pfad zu einer Datei eingetragen ist und diesen dann an die Ausgabefunktion weiterreichen.
Die Ausgabefunktion macht nichts anderes, als dass sie das File mittels
header('Content-Type: application/octet-stream');
readfile($path);
ausgibt...
Siehe hierzu die Benutzerkommentare von http://php.net/manual/de/function.header.php
In das von mir beschriebene Modell kannst Du nun leicht benutzerspezifische Zugriffsrechte einbauen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg