Mailinglisten-Archive |
> ist jemandem von euch schonmal aufgefallen das wenn man per readfile > Inhalt > ausliefert die Größe des Apache-Prozesses beeinflusst wird da er > scheinbar > die Daten im ganzen Block im Speicher hält? > Ich liefer per readfile Dateien aus die z.B. 70-80 MB groß sind und habe > seit dem httpd-Prozesse mit ebenfalls etwas mehr als dieser Größe. Ich > kann > mir nichts anderes vorstellen woran es liegen könnte. dazu muss man wissen, was readfile macht. es liest den kompletten inhalt der datei in den speicher, bevor es wieder ausgegeben wird, d.h. der prozess muss die datei erstmal oeffen und komplett einlesen, und es im speicher dann aufbereiten. das kann u.u. ein paar sekunden dauern, weil erst wen das abgeschlossen ist, kann es weitergehen .. wen du jetzt 70 bis 80mb dateien damit auslieferst, hast du memory_limit bestimmt auf 0 setzen muessen, damit es funktioniert. nicht so clever, den mit ein paar gleichzeitigen anfragen des downloads kannst du dir den server "dicht machen" lassen .. besser ist, da nimmst zum ausliefern solch grosser dateien eine kombination von fread/feof in einer while schleife. schneller und resourcenschonender .. // oeffne datei $fp = fopen("yourfileher", "r); // solange das ender der datei noch nicht erreicht wurde, mache schleife while(!feof($fp)) { // gibt inhalt der datei aus // lies dazu maximal 8192 bytes // oder soviel, wie noch drin ist echo fread($fp, 8192); } http://de3.php.net/fopen http://de3.php.net/feof http://de3.php.net/fread clever waere vielleicht noch nur 1024 bytes oder so zu lesen und auszugeben, und gleich zu flushen. ciao Mathias
php::bar PHP Wiki - Listenarchive