Der Martin: Demo: JavaScript und Binärdateien, Multimedia

Beitrag lesen

Hallo,

Streamfähig heißt, dass der Upload nicht im RAM des Servers zwischengespeichert werden muss, sondern direkt aus dem STDIN Datenstrom in das Filesystem des Servers übertragen werden kann.

Streaming heißt für mich, dass die übermittelten Daten direkt verarbeitet werden und gar nicht zwischengespeichert werden müssen. Deine obige Aussage deckt sich daher nur dann mit meiner Ansicht, wenn das Speichern als Datei der eigentliche Zweck der Operation ist.

Ansonsten sind Audio- oder Videodaten typische Kandidaten für Streaming: Sie können nach dem Empfang direkt wiedergegeben werden, ohne sie erst als Datei zu speichern. Dass eine kleine Datenmenge doch zwischengespeichert wird (einerseits um Transfer-Unterbrechungen auszubügeln, andererseits zum Decodieren der Daten), ändert nichts am Konzept an sich.

In PHP ist das bei multipart/form-data so gelöst, dass anhängende Uploads vom Server automatisch als Temp-Dateien gespeichert und nicht im RAM gehalten werden. Allerdings deute ich die Hinweise auf die RAM-Limitierung in der PHP-Doku so, dass auch PHP eine einzelne Datei erstmal im RAM montiert bevor sie in den TEMP-Ordner kommt.

Woraus liest du das ab? AFAIK gibt es für PHP generell ein einstellbares Speicherlimit, das die verfügbare RAM-Menge pro Script begrenzt. Das hat aber mit File-Uploads nichts zu tun. Und dann gibt es ein Größenlimit für Uploads, das aber IMO nicht darauf schließen lässt, dass die Daten zunächst im RAM gehalten werden.

Aus Sicht der RAM-Nutzung des Servers ist ein multipart-Upload von 10 Dateien zu je 100 MB also besser als eine Codierung dieser 10 Dateien in einen 1GB Klotz.

Hmm. Ich würd' mal sagen, das macht keinen Unterschied.

Bei unbekannten Content-Typen sagt das PHP Handbuch, dass es auf die SAPI-Implementierung ankäme, ob die POST Daten gepuffert würden oder nicht.

Schade, dass du die Stelle nicht verlinkt hast. Ich vermute nämlich, du hast das missverstanden.

Ungepuffert würde bedeuten: sie bleiben als IP Pakete auf der Leitung (und der Client wartet), bis das PHP losläuft und sie liest.

Nein, das läuft so nicht. AFAIK nimmt der Webserver den vollständigen POST-Request entgegen, bevor er den PHP-Prozess überhaupt startet.

Aus Sicht des Speicherverbrauchs wäre das optimal.

Ja. Aber das gibt PHP AFAIK nicht her.

So long,
 Martin

--
Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.
- Douglas Adams, The Hitchhiker's Guide To The Galaxy