eddi: Unbuffered Upload

Beitrag lesen

Hallo,

ich versuche mal eine Kerze anzuzünden:

Wenn von Upload mit eine Apachen und PHP die Rede sein sollte (da zumindest weiß ich genau, was dort vor sich geht), so ist der Arbeitsspeicher von der ganzen Aktion nur in dem Maße betroffen, das PHP dort für den Prozess geladen wird.

+--------+             +--------+
 | Client | - Upload -> | Server |
 +--------+             +--------+
                             |
                          Upload
                             |
                        +--------+
                        |   PHP  |-> tmpfile
                        +--------+

Was passiert also: Die Request-Header werden vom Server empfangen und geparst, dabei stellt dieser fest, daß es sich um ein Anfrage an ein PHP-Script handelt. Der Server macht seine CGI-Schnittstelle klar und läd PHP. Danach reicht er jedes einzeln empfangene Byte direkt an PHP zur Verarbeitung der Anfrage weiter (das kann man sich wie ein Tunnel vorstellen - oder wie ein Firewall). Der Server wird nur noch kontrollieren, ob ein Verbindungstimeout auftritt und ob das Datenvolumen gegen die eigene Konfiguration verstößt (LimitRequestBody).

PHP nimmt den vom Server angelieferten Datenstrom entgegen und parst ihn ebenfalls auf HTTP-Header wie Content-Type (wichtig für boundary - Grenzstring zwischen zwei übertragnen Datein) und Content-Length (u. A.). Dabei legt PHP temporäre Datein (für jedes hochgeladene File eine eigene) in dem vorkonfigurierten Verzeichnis an und schreibt den Datenstrom dort hinein. Dabei ist PHP per Konfiguration gehalten ebenfalls auf die Gesamtgröße zu achten (Konfigurations-Optionen für Datei-Uploads).

Ich müßte es mir noch mal genau ansehen, aber bis auf die einzelnen Buffer (Client->Server, Server->PHP, PHP->FS) füllt dort nichts erhebliches den Arbeitsspeicher.

Gruß aus Berlin!
eddi

--
Achte die Kleinigkeiten, aber liebe das Detail!