phpbar.de logo

Mailinglisten-Archive

RE: [php] readfile und Apache Prozessgröße

RE: [php] readfile und Apache Prozessgröße

Andreas Müller php at universalware.de
Mon Sep 5 10:51:45 CEST 2005


Hallo Mathias,

> 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 ..

leider scheint da Docu und Realität nicht überein zu stimmen.
memory_limit steht bei mir auf 32 MB. Trotzdem kann readfile() 80 MB große
Dateien ausliefern. Das hatte ich vorher ja alles getestet und mit daher
auch keine Sorgen gemacht da es offensichtlich ohne Speicherverbrauch in
Dateigröße einher ging. Ich schätze mal readfile() macht intern auch nichts
anderes als eine schleife und gibt das direkt an den Apache weiter. Bleibt
die Frage ob er es mit blockorientierem flush() oder ohne macht. Ohne würde
das Problem erklären.
Nur scheint dabei einer der beiden das ganze zu Puffern. So langsam kommt
bei mir aber der Apache in verdacht.

Mir schein das das ganze auch bei einer blockorientierten Schleife passiert
nur nicht ganz so krass. Daher vermute ich fast das der Apache intern die
Daten cacht. Schließlich kann der Client die Daten ja nicht so schnell
abnehmen wie der Apache sie liefern kann und irgendwo müssen die Daten ja
hin. Ist ne ziemlich blöde Sache.

Hat hier irgendwer Erfahrung im Massendownload von großen Datenmengen via
PHP? Denn solange das ganze als normales File vom Indianer ausgeliefert
wurde gab es Null Probleme.

Gruß,
Andreas



php::bar PHP Wiki   -   Listenarchive