Un téléversement qui échoue, c'est presque toujours l'une de trois limites, et relever celle qu'on connaît laisse les deux autres en travers. Toutes trois doivent être au moins aussi grandes que le fichier.
Les trois
- upload_max_filesize (PHP) - le plus gros fichier isolé.
- post_max_size (PHP) - la requête entière : elle doit donc être PLUS GRANDE que le fichier, car les champs du formulaire comptent aussi.
- client_max_body_size (Nginx) - le serveur web refuse avant même qu'on atteigne PHP.
; php.ini
upload_max_filesize = 64M
post_max_size = 72M
memory_limit = 256M
# nginx
client_max_body_size 72M;
Laquelle a refusé
- 413 Request Entity Too Large - Nginx. PHP ne l'a jamais vu.
- Un message de PHP sur la taille - upload_max_filesize.
- Un $_POST vide sans la moindre erreur - post_max_size. PHP jette toute la requête en silence, et c'est ce qui rend celle-là si déroutante.
Vérifier que le changement a pris
php -i | grep -E "upload_max_filesize|post_max_size"
Cela lit la configuration en ligne de commande, qui est souvent un autre fichier que celui qu'utilise le serveur web. Faites confiance à une page phpinfo() plutôt qu'au terminal : elle seule montre ce avec quoi votre site tourne réellement.
WordPress affiche la limite effective sur la page des médias. Si l'ancien chiffre y figure encore après un changement, c'est que PHP-FPM n'a pas été rechargé :
systemctl reload php8.3-fpm.