So sieht die Meldung aus
The uploaded file exceeds the upload_max_filesize directive in php.ini
PHP Warning: POST Content-Length of 52428900 bytes exceeds the limit of 8388608 bytes in Unknown on line 0Häufige Ursachen
upload_max_filesizein derphp.inivon PHP-FPM ist kleiner als die Datei.post_max_sizeist kleiner als Upload plus übrige Formulardaten (dann ist$_FILESstillschweigend leer).- nginx
client_max_body_sizeist kleiner und antwortet mit 413, bevor PHP die Datei sieht. - Die Einstellung wurde in der CLI-
php.inistatt in der FPM-Datei geändert. - Ein Pool oder eine
.user.iniüberschreibt den globalen Wert, oder der Upload ist so langsam, dassmax_input_timeodermax_execution_timeihn beendet.
Prüfen
- Wirksame Werte in der FPM-php.ini
grep -E '^(upload_max_filesize|post_max_size|memory_limit|max_input_time|max_execution_time) *=' /etc/php/*/fpm/php.ini - Überschreibungen in conf.d und Pools
grep -rEn 'upload_max_filesize|post_max_size' /etc/php/*/fpm/conf.d/ /etc/php/*/fpm/pool.d/ - Das nginx-Limit
nginx -T 2>/dev/null | grep -n 'client_max_body_size' - Was liefert der Webserver bei einem großen Body? (auf die Statuszeile achten)
curl -s -o /dev/null -w '%{http_code}\n' -X POST --data-binary @/etc/services https://example.com/upload.php
Lösung
- Ein Drop-in
/etc/php/<Version>/fpm/conf.d/99-upload.inianlegen mitupload_max_filesize = 64Mundpost_max_size = 72M. Der zweite Wert muss größer als der erste sein. - Darauf achten, dass
memory_limitnicht kleiner alspost_max_sizeist, wenn die Anwendung die Datei in den Speicher lädt. - In nginx
client_max_body_size 72M;setzen (inhttp,serveroder der Upload-location). - Den PHP-FPM-Dienst deiner Version neu starten und nginx neu laden:
nginx -t && systemctl reload nginx. - Bei langsamen Verbindungen auch
max_input_timeundmax_execution_timeerhöhen.
Häufige Fragen
Warum muss post_max_size größer sein als upload_max_filesize?
Die POST-Anfrage enthält die Datei plus Formularfelder und Kodierungs-Overhead. Übersteigt sie post_max_size, verwirft PHP den gesamten Anfrage-Body.
Hilft .htaccess bei nginx?
Nein. nginx ignoriert .htaccess. Nimm das php.ini-Drop-in oder php_admin_value in der Pool-Datei.