Der Martin: Frage zur maximalen größe von per POST hochgeladener Dateien

Beitrag lesen

n'Abend!

Ich spiele mich gerade mit PHP-Dateiuploads und würde gerne wissen, wie groß die Dateien _netto_ sein dürfen die ich hochlade.

Beim Datei-Upload mit einem HTML-Formular musst du ja wohl enctype="multipart/form-data" verwenden. Dann werden die hochgeladenen Dateien, eine nach der anderen, im Request-Body mit übertragen.
Das bedeutet aber, dass diese Dateien dann nicht "binary" übertragen werden, sondern MIME-codiert. Die HTML-Spec verweist dabei auf RFC2045, die für die Codierung entweder Quoted Printable oder base64 anbietet. Quoted Printable ist nur bei "lesbaren", also textbasierten Formaten sinnvoll, bei Binärdateien kommt wohl base64 zum Einsatz. Und diese Codierung bringt es nun mal mit sich, dass das übertragene Datenvolumen um ein Drittel im Verhältnis zu den Rohdaten anwächst. Wenn upload_max_filesize also auf 2MB gesetzt ist, kannst du maximal 1.5MB Rohdaten hochladen (minus ein paar hundert Bytes für den Request-Header und die MIME-Rahmeninformationen).

Wenn ich drei Datein hochlade zwei zu 900KB und eine zu 265 MB, klappt es.
Wenn ich drei Datein zu 809K, 981K, 973K hochlade klappt es auch.
Wenn ich eine Datei mit 1.7MB hochlade, klappt es nicht.

Oh, das lässt mich vermuten, dass upload_max_filesize in PHP für jede Datei einzeln abgeprüft wird und nicht für die Summe der Dateigrößen. Außerdem gehe ich davon aus, dass es in deinem ersten Beispiel wohl 265kB heißen sollte und noch 265MB.

Warum?

Siehe oben - die base64-Codierung bringt's.

Schönen Abend noch,
 Martin

--
Wer schläft, sündigt nicht.
Wer vorher sündigt, schläft besser.