Datei aus geschütztem Verzeichnis lesen
Patrick
- php
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
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
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
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
Das stimmt. Solange das Script und das geschuetze Verzeichnis dem gleichen Server gehoeren... Ich hab hier den Verdacht, dass dem nicht so ist, oder?
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