Jaecko
10.10.2011, 11:33
Moin.
In einem Projekt sollen von einem Server Dateien herunterladbar sein. Problem: Der Ordner für die Dateien liegt "ausserhalb" des Document Root, also per http nicht zugreifbar.
"Theoretisch" könnte man diese über file:// holen. Da aber die meisten Browser es nicht zulassen, file:// von http(s):// aus aufzurufen, hab ich eine andere Möglichkeit verwendet. (Den Link von Hand kopieren und in ein Browserfenster eingeben funktioniert zwar, ist aber zu aufwendig und für den ein odere anderen DAU ein Problem).
Mit fopen kann ich problemlos auf die Dateien zugreifen und den Inhalt mit fread holen. Über einen Download-Header veranlass ich im Browser dann den Download des Datenblocks.
Vereinfacht und mal ohne Prüfungen auf Dateiexistenz etc.:
$_fileWithPath = $_GET['file'];
$filehandle = fopen($_fileWithPath, "r");
$stream = fread($filehandle, filesize($_fileWithPath));
fclose($filehandle);
header("Content-type: application/force-download");
header("Content-Disposition: filename=$_filename");
header("Content-Description: Downloaded File");
echo "$stream";
Das funktioniert soweit auch, nur dass in der heruntergeladenen Datei dann ein Leerzeichen (0x20) an erster Stelle ist, das in $stream definitiv nicht drin ist.
Ersetz ich das nämlich z.B. durch echo "ABC" steht in der Datei dann " ABC".
Weiss jemand, wo dieses Leerzeichen herkommt bzw. wie man das loswird?
mfG
In einem Projekt sollen von einem Server Dateien herunterladbar sein. Problem: Der Ordner für die Dateien liegt "ausserhalb" des Document Root, also per http nicht zugreifbar.
"Theoretisch" könnte man diese über file:// holen. Da aber die meisten Browser es nicht zulassen, file:// von http(s):// aus aufzurufen, hab ich eine andere Möglichkeit verwendet. (Den Link von Hand kopieren und in ein Browserfenster eingeben funktioniert zwar, ist aber zu aufwendig und für den ein odere anderen DAU ein Problem).
Mit fopen kann ich problemlos auf die Dateien zugreifen und den Inhalt mit fread holen. Über einen Download-Header veranlass ich im Browser dann den Download des Datenblocks.
Vereinfacht und mal ohne Prüfungen auf Dateiexistenz etc.:
$_fileWithPath = $_GET['file'];
$filehandle = fopen($_fileWithPath, "r");
$stream = fread($filehandle, filesize($_fileWithPath));
fclose($filehandle);
header("Content-type: application/force-download");
header("Content-Disposition: filename=$_filename");
header("Content-Description: Downloaded File");
echo "$stream";
Das funktioniert soweit auch, nur dass in der heruntergeladenen Datei dann ein Leerzeichen (0x20) an erster Stelle ist, das in $stream definitiv nicht drin ist.
Ersetz ich das nämlich z.B. durch echo "ABC" steht in der Datei dann " ABC".
Weiss jemand, wo dieses Leerzeichen herkommt bzw. wie man das loswird?
mfG