Nobbie wrote:Egal warum es bei "kleinen" Dateien knallt - das ist grausam programmiert. So kann man keinen Download programmieren, da wird die ja die komplette Datei in den Serverspeicher geladen.
Den Code habe ich irgendwo aus dem Internet, ich selber beschäftige mich erst seit ein paar Tagen mit PHP.
Wieso ist ob_end_flush() auskommentiert?
Ich habe irgendwo gelesen, dass man bei Problemen beim Download den output Buffer abschalten soll..da habe ich etwas expermimentiert...aber es hat nichts gebracht (oder ich habe da einen Fehler gemacht)
Ich würde auch den readfile() nicht darauf loslassen, nicht bei so großen Dateien.
ja, alternativ habe ich noch folgenden code gefunden, der die Datei anscheinend in 4KB Blöcken an den Client sendet.
Wäre vielleicht besser?
Aber auch damit habe ich Probleme: Die Dateien werden nicht vollständig runtergeladen...entweder bricht der Download einfach ab (obwohl ich die max. Skriptlaufzeit auf 10 Minuten gesetzt habe) oder die Dateigrösse der runtergeladenen Datei stimmt zwar mit der Origonaldatei überein - aber die Daten stimmen nicht (Checksumme ist unterschiedlich)
- Code: Select all
$Dateiname = basename($Datei);
$Groesse = filesize($Datei);
$file=fopen($Datei,'r');
//echo "starte Download für:[" . $file . "]<br>";
if ($file) {
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: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment; filename=\"".$Dateiname."\";");
header("Content-Description: File Transfer");
header("Content-Transfer-Encoding: binary");
header('Content-Length: '.$Groesse );
flush();
while (!feof($file)) {
print(fread($file,4096));
flush();
}
}
fclose($file);
die("OK");
}
else
{
die ("Datei nicht gefunden:[" . $Datei . "]") ;
}
P.S.: Was ist denn nun genau die Zeile 114?
Readfile
Im Grund möchte ich erreichen, dass der Benutzer auf eine Link klickt, z.b: http://server/login1.php?file=1000.iso, dann nach einem Passwort gefragt wird und dann die Datei runtergeladen wird.