Upload de fichiers : échec silencieux quand le fichier dépasse post_max_size (8M) #48

Closed
opened 2026-05-13 10:55:36 +00:00 by cedricAbonnel · 2 comments
Owner

Symptôme

L'ajout d'un ou plusieurs fichiers via /files/{uuid}/add échoue silencieusement : le formulaire soumet, la page redirige vers /edit/{uuid}, mais aucun fichier n'est ajouté.

Cause identifiée

Log Apache du 2026-05-13 :

PHP Warning: POST Content-Length of 9099272 bytes exceeds the limit of 8388608 bytes
referer: https://varlog.a5l.fr/files/1363f454-ca59-4264-a8f0-a2446d645ebc/add

Le fichier uploadé fait ~8,7 Mo, ce qui dépasse post_max_size = 8M (valeur par défaut PHP). Quand cette limite est dépassée, PHP vide $_FILES et $_POST entièrement. Le handler add_files itère alors sur un tableau vide, ne fait rien, et redirige vers l'édition — sans aucun message d'erreur.

Double problème

1. Limite trop basse

post_max_size et upload_max_filesize à 8M est insuffisant pour des fichiers courants (photos ~5-10 Mo, vidéos, PDF lourds). À augmenter dans la config PHP-FPM.

2. Échec silencieux

Le handler add_files (ligne ~1193 dans public/index.php) ne détecte pas le cas où $_FILES est vide à cause d'un dépassement de post_max_size. Il faudrait :

  • détecter ce cas via $_SERVER['CONTENT_LENGTH'] > 0 && empty($_FILES) après un POST
  • afficher un message d'erreur explicite à l'utilisateur (ex. : « Fichier trop lourd — limite serveur : 32 Mo »)

Fichiers concernés

  • app/public/index.php — case add_files (~ligne 1185)
  • Config PHP-FPM : /etc/php/8.3/fpm/pool.d/www.conf ou php.ini

Fix suggéré

  1. Augmenter upload_max_filesize et post_max_size à 32M (ou 64M) dans la config PHP-FPM
  2. Ajouter dans le handler add_files une détection du dépassement :
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Dépassement post_max_size → $_FILES vide alors que des données ont été envoyées
    $contentLength = (int)($_SERVER['CONTENT_LENGTH'] ?? 0);
    if ($contentLength > 0 && empty($_FILES['files']['tmp_name'] ?? [])) {
        // afficher erreur
    }
    ...
}
## Symptôme L'ajout d'un ou plusieurs fichiers via `/files/{uuid}/add` échoue silencieusement : le formulaire soumet, la page redirige vers `/edit/{uuid}`, mais aucun fichier n'est ajouté. ## Cause identifiée Log Apache du 2026-05-13 : ``` PHP Warning: POST Content-Length of 9099272 bytes exceeds the limit of 8388608 bytes referer: https://varlog.a5l.fr/files/1363f454-ca59-4264-a8f0-a2446d645ebc/add ``` Le fichier uploadé fait ~8,7 Mo, ce qui dépasse `post_max_size = 8M` (valeur par défaut PHP). Quand cette limite est dépassée, PHP vide `$_FILES` et `$_POST` entièrement. Le handler `add_files` itère alors sur un tableau vide, ne fait rien, et redirige vers l'édition — sans aucun message d'erreur. ## Double problème ### 1. Limite trop basse `post_max_size` et `upload_max_filesize` à 8M est insuffisant pour des fichiers courants (photos ~5-10 Mo, vidéos, PDF lourds). À augmenter dans la config PHP-FPM. ### 2. Échec silencieux Le handler `add_files` (ligne ~1193 dans `public/index.php`) ne détecte pas le cas où `$_FILES` est vide à cause d'un dépassement de `post_max_size`. Il faudrait : - détecter ce cas via `$_SERVER['CONTENT_LENGTH'] > 0 && empty($_FILES)` après un POST - afficher un message d'erreur explicite à l'utilisateur (ex. : « Fichier trop lourd — limite serveur : 32 Mo ») ## Fichiers concernés - `app/public/index.php` — case `add_files` (~ligne 1185) - Config PHP-FPM : `/etc/php/8.3/fpm/pool.d/www.conf` ou `php.ini` ## Fix suggéré 1. Augmenter `upload_max_filesize` et `post_max_size` à 32M (ou 64M) dans la config PHP-FPM 2. Ajouter dans le handler `add_files` une détection du dépassement : ```php if ($_SERVER['REQUEST_METHOD'] === 'POST') { // Dépassement post_max_size → $_FILES vide alors que des données ont été envoyées $contentLength = (int)($_SERVER['CONTENT_LENGTH'] ?? 0); if ($contentLength > 0 && empty($_FILES['files']['tmp_name'] ?? [])) { // afficher erreur } ... } ```
Author
Owner

Résolution

1. Config PHP-FPM

Ajout dans server/php-fpm/www.conf (pool www) :

php_admin_value[upload_max_filesize] = 32M
php_admin_value[post_max_size] = 34M

Déployé et php8.3-fpm rechargé (systemctl reload php8.3-fpm).

2. Détection du dépassement (public/index.php)

Le handler add_files détecte maintenant le cas où $_FILES est vide malgré un POST non vide (signature d'un dépassement post_max_size) et reste sur la page avec un message d'erreur au lieu de rediriger silencieusement.

3. Affichage de l'erreur (templates/add_files.php)

Un bloc alert-danger s'affiche si $addFilesError est défini.


Fichiers déployés : public/index.php, templates/add_files.php.

## Résolution ### 1. Config PHP-FPM Ajout dans `server/php-fpm/www.conf` (pool `www`) : ```ini php_admin_value[upload_max_filesize] = 32M php_admin_value[post_max_size] = 34M ``` Déployé et `php8.3-fpm` rechargé (`systemctl reload php8.3-fpm`). ### 2. Détection du dépassement (`public/index.php`) Le handler `add_files` détecte maintenant le cas où `$_FILES` est vide malgré un POST non vide (signature d'un dépassement `post_max_size`) et reste sur la page avec un message d'erreur au lieu de rediriger silencieusement. ### 3. Affichage de l'erreur (`templates/add_files.php`) Un bloc `alert-danger` s'affiche si `$addFilesError` est défini. --- Fichiers déployés : `public/index.php`, `templates/add_files.php`.
Author
Owner

Addendum — correction complète

Le serveur utilise mod_php (non PHP-FPM). Tous les changements précédents dans le pool FPM (www.conf) étaient sans effet.

Fix réel : modification de /etc/php/8.3/apache2/php.ini :

post_max_size = 2048M
upload_max_filesize = 500M

Suivi d'un systemctl restart apache2. Valeurs vérifiées via un script de test : 2048M / 500M actifs.

## Addendum — correction complète Le serveur utilise **mod_php** (non PHP-FPM). Tous les changements précédents dans le pool FPM (`www.conf`) étaient sans effet. Fix réel : modification de `/etc/php/8.3/apache2/php.ini` : ``` post_max_size = 2048M upload_max_filesize = 500M ``` Suivi d'un `systemctl restart apache2`. Valeurs vérifiées via un script de test : **2048M / 500M** actifs.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: cedricAbonnel/varlog#48