daneben hast du das "kleine" Problem, dass readfile dir den doppelten Speicherplatz belegt, den die Datei letztlich braucht (einmal kommt sie in den "Heap"-Speicher und ein weiteres mal brauchst du den Platz im Ausgabe-Puffer von php). Um das zu Umgehen müsstest du die Datei derart zum User downloaden, dass ein selbstgewählter Ausgabepuffer zum tragen kommt.
ich mach das zum Bleistift so - funzt locker bei 2 Gbyte-Dateien
PHP-Code:
if (file_exists($Datei)) {
$Dateiname = basename($Datei);
$Groesse = filesize($Datei);
$file=fopen($Datei,'r');
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();
}
mit dem Codeschnipsel hier lade ich jedwede Datei bei mir, mit Speicherbedarf von 4kbyte (der Pufferbereich fürs fread) und ebenfalls 4 kbyte Ausgabepuffer ...
Die etwas ausufernden Header-Anweisungen sorgen dafür, dass es auch bei IE 6 tut, was es soll
$Datei enthält den kompletten Pfad + Dateinamen