[PHP] Problem mit Filedownload via getfile

CyberDelia

Well-known member
12 Juni 2006
58
2
Hallo, ich habe ein echtes Problem, ich versuche Files mit Hilfe der getfile Funktion und der Übergabe eines Headers zum Download anzubieten.

Allerdings bricht der Download nach ca. 5 Minuten immer ab, die Files haben jedoch zwischen 800MB und 1GB. Hat jemand eine Idee was ich falsch mache?

Hier ist meine getfile.php

PHP:
<?
$file=$_GET['file'];

$datei = "d:\otrfiles/".$file;

header("Content-Type: application/x-zip-compressed");
$save_as = basename($datei);

header("Content-Disposition: attachment; filename=\"$save_as\"");
readfile($datei);

?>
 
Du meinst wohl die readfile()-Funktion ;)

Ich weiß ned, wie es mit Speicher aussieht, aber PHP bricht nach einer gewissen Zeit ab. Du kannst mit set_time_limit() den Wert für die zulässige maximale Ausführungsdauer in Sekunden erhöhen.
Wenn es nicht dein Server ist, ist die Verwendung der Funktion allerdings meistens eingeschränkt.

P.S.
Was is \o ? Wenn du einen Backslash willst, musst du den escapen. Wundert mich ganz, dass das Ding sogar 5 Minuten funktioniert.
 
Ja klar ich meine readfile. Also wie das mit dem Escapen geht weiß ich ehrlich gesagt nicht. Der Download startet soweit einwandfrei, nur eben nach ca. 5 Minuten ist Schluß. Die max time und php input time ( oder so ähnlich ) in der php.ini habe ich schon hoch gedreht ( auf mehrere Stunden ), leider ohne Erfolg.
 
Moin,


Ja klar ich meine readfile. Also wie das mit dem Escapen geht weiß ich ehrlich gesagt nicht. Der Download startet soweit einwandfrei, nur eben nach ca. 5 Minuten ist Schluß. Die max time und php input time ( oder so ähnlich ) in der php.ini habe ich schon hoch gedreht ( auf mehrere Stunden ), leider ohne Erfolg.

5 Minuten ist schon extrem hoch, ich hab mal folgenden Code, der sollte auch bei 2GB keine Probleme darstellen, zumindest läuft es bei mir ohne Probleme:

PHP:
$files = Array("$id" => "$datei");
$filename = "$verzeichnis".$files[$_GET[id]];
header("Content-Type: x-type/subtype");
header("Content-Length: ".filesize($filename));
header("Content-Disposition: attachment; filename=".$files[$_GET[id]]);
readfile($filename);

in files steht einfach nur eine ID und der Filename in $datei, probier es mal aus.
 
Hast du mal in dasn ErrorLog von Apache geschaut, vielleicht steht dort drin wo das Problem ist. Eigentlich ist an dem Code in die Richtung nix auszusetzen. (in Richtung sicherheit schon.)

Was is \o ? Wenn du einen Backslash willst, musst du den escapen. Wundert mich ganz, dass das Ding sogar 5 Minuten funktioniert.

Nein muss man nicht... wenn er mit dem nachfolgenden Zeichen keine Escapesequenz darstellt ist der Backslash ein Blackslash.
 
Ich weiß ned, wie es mit Speicher aussieht, aber PHP bricht nach einer gewissen Zeit ab. Du kannst mit set_time_limit() den Wert für die zulässige maximale Ausführungsdauer in Sekunden erhöhen.
Stimmt, das liegt am Speicher. PHP lädt per default nur 4-8 MB, je nach Einstellung.
https://www.php.net/manual/de/ini.core.php#ini.memory-limit
An der Ausführungszeit wirds wohl nicht liegen weil PHP die Zeit für den Zugriff auf eine Datei nicht zur Ausführungszeit zählt - 5 Minueten wären auch zu lang.
https://www.php.net/manual/de/ref.info.php#ini.max-execution-time

Du müsstest noch so ein download resume reinbauen oder nimm Perl.
 
Zuletzt bearbeitet: