Si tu dois augmenter la limite des fichiers uploadés sur ton serveur suite à un message d’erreur lors de l’envoi, voici comment ajuster ces paramètres.
Ce problème se manifeste généralement par un message comme :
"Erreur de téléchargement: La taille du fichier dépasse la limite autorisée".
La solution dépend des versions PHP et de la configuration mémoire. Voici comment procéder:
🌘 1. Connecte-toi à ton serveur via SSH
ssh [utilisateur]@[adresse_serveur]
Explication détaillée de la commande SSH :
ssh: Commande pour établir une connexion sécurisée (Secure Shell) vers un serveur distant[utilisateur]: Remplace par ton nom d’utilisateur sur le serveur (ex:admin,root,www-data)[adresse_serveur]: Remplace par l’adresse IP ou le nom de domaine de ton serveur- Alternative avec port spécifique :
ssh -p 2222 [utilisateur]@[adresse_serveur]si ton serveur utilise un port SSH non standard (22) - Connexion avec clé SSH :
ssh -i /chemin/vers/ta_cle [utilisateur]@[adresse_serveur]pour une connexion plus sécurisée
Vérification de la connexion :
Une fois connecté, tu peux vérifier que tu es bien sur le bon serveur avec :
hostname
whoami
pwd
🌘 2. Ouvre le fichier php.ini approprié
Adapte la version selon celle installée sur ton serveur. Il se peut qu’il y en ait plusieurs, alors il faut identifier celle utilisée par ton application web en regardant quel “socket” il utilise dans la configuration de NGINX.
Comment trouver la bonne version PHP :
php -v # Affiche la version PHP CLI
which php # Montre le chemin de l'exécutable PHP
systemctl status php*.fpm # Vérifie les services PHP-FPM en cours d'exécution
-
Pour PHP 8.x:
sudo nano /etc/php/8.x/fpm/php.ini # Remplace 'x' par la version exacteExplication du chemin :
/etc/: Répertoire des fichiers de configuration systèmephp/8.x/: Répertoire spécifique à la version PHP (8.0, 8.1, 8.2, etc.)fpm/: Indique que c’est la configuration pour PHP-FPM (FastCGI Process Manager)php.ini: Fichier principal de configuration PHP
-
Pour PHP 7.x (versions antérieures), selon ta configuration:
sudo nano /etc/php/7.x/apache2/php.iniExplication du chemin :
-
apache2/: Indique que PHP est utilisé avec Apache comme serveur web -
Ce fichier est utilisé lorsque PHP est compilé comme module Apache
ou
sudo nano /etc/php/cgi/php.iniExplication du chemin :
-
cgi/: Indique que PHP est utilisé en mode CGI (Common Gateway Interface) -
Configuration pour les installations PHP CGI standalone
-
Alternative pour trouver tous les fichiers php.ini :
find /etc -name "php.ini" 2>/dev/null
🌘 3. Modifie les paramètres d’upload
Cherche et modifie ces lignes:
; Maximum upload file size in MB ;
upload_max_filesize = [taille]M ; Ex: 512M
; post_max_size doit être >= upload_max_filesize ;
post_max_size = [meme_taille_que_upload]M ; Ex: 512M
; Ajustez la limite de mémoire si nécessaire pour traiter les gros fichiers :
memory_limit = [meme_taille_que_upload]M ; Ex: 512M
Explication détaillée des paramètres :
🌘 upload_max_filesize
- Fonction : Définit la taille maximale des fichiers qui peuvent être uploadés via HTTP
- Format : Doit se terminer par
K(kilooctets),M(mégaoctets) ouG(gigaoctets) - Valeurs courantes :
8M(par défaut),16M,32M,64M,128M,256M,512M,1024M - Importance : C’est la limite directe pour les fichiers uploadés
🌘 post_max_size
- Fonction : Définit la taille maximale des données POST (incluant les fichiers uploadés)
- Relation avec upload_max_filesize : DOIT être supérieur ou égal à
upload_max_filesize - Recommandation : Mettez-le au moins égal à
upload_max_filesize, ou légèrement supérieur - Pourquoi : Si
post_max_sizeest inférieur àupload_max_filesize, les uploads échoueront même si le fichier est plus petit queupload_max_filesize
🌘 memory_limit
- Fonction : Définit la quantité maximale de mémoire qu’un script PHP peut utiliser
- Importance pour les uploads : PHP utilise de la mémoire pour traiter les fichiers uploadés
- Recommandation : Pour les gros fichiers, cette valeur devrait être au moins égale à
upload_max_filesize - Format : Doit se terminer par
K,MouG
Comment trouver et modifier ces paramètres :
# Chercher les paramètres actuels dans php.ini
grep -n "upload_max_filesize\|post_max_size\|memory_limit" /etc/php/8.x/fpm/php.ini
# Utiliser sed pour modifier les valeurs (alternative à nano)
sudo sed -i 's/upload_max_filesize = .*/upload_max_filesize = 512M/' /etc/php/8.x/fpm/php.ini
sudo sed -i 's/post_max_size = .*/post_max_size = 512M/' /etc/php/8.x/fpm/php.ini
sudo sed -i 's/memory_limit = .*/memory_limit = 512M/' /etc/php/8.x/fpm/php.ini
🌘 4. Modifie le fichier de configuration Nginx
Dans certains cas, il y a aussi un fichier spécifique à l’application dans la configuration du proxy inversé (Apache ou nginx) qui va passer en priorité sur les paramètre globaux configurés dans PHP.
Pourquoi modifier la configuration Nginx ?
- Nginx a sa propre limite de taille de corps de requête (
client_max_body_size) - Cette limite est prioritaire sur la configuration PHP
- Sans cette modification, même si PHP autorise les gros fichiers, Nginx les rejettera
Comment trouver le fichier de configuration Nginx :
# Trouver tous les fichiers de configuration Nginx
find /etc/nginx -name "*.conf" 2>/dev/null
# Vérifier la configuration Nginx actuelle
grep -r "client_max_body_size" /etc/nginx/
# Pour une application spécifique (ex: Castopod)
find /etc/nginx -name "*castopod*" -type f
Voici un exemple de fichier pour l’application Castopod dans Yunohost. Remplace castopod.domaine.com par le nom de domaine de ton application, et castopod.conf par le nom du fichier qui se trouve dans le répertoire.
sudo nano /etc/nginx/conf.d/castopod.domaine.com.d/castopod.conf
Explication du chemin :
/etc/nginx/: Répertoire principal de configuration Nginxconf.d/: Répertoire pour les fichiers de configuration supplémentairescastopod.domaine.com.d/: Sous-répertoire spécifique au domainecastopod.conf: Fichier de configuration pour l’application Castopod
Les paramètres qui auront une influence ici sont:
client_max_body_size 512M;
Explication du paramètre Nginx :
client_max_body_size: Définit la taille maximale du corps de la requête HTTP- Format : Doit se terminer par
K,MouG - Priorité : Cette limite est appliquée avant que la requête n’atteigne PHP
- Valeur recommandée : Doit être supérieure ou égale à
post_max_sizedans PHP
Autres paramètres Nginx pertinents :
# Pour les temps d'attente plus longs pour les gros fichiers
client_body_timeout 300s;
client_header_timeout 300s;
keepalive_timeout 300s;
send_timeout 300s;
Il faut ensuite redémarrer le serveur nginx:
sudo systemctl restart nginx
Explication de la commande de redémarrage :
sudo: Exécute la commande avec les privilèges administrateursystemctl: Outil de gestion des services systemd (utilisé sur la plupart des systèmes modernes)restart nginx: Redémarre le service Nginx (arrête puis démarre)- Alternative douce :
sudo systemctl reload nginx(recharge la configuration sans couper les connexions existantes)
Vérification du service Nginx :
sudo systemctl status nginx # Vérifier que le service fonctionne
sudo nginx -t # Tester la configuration syntaxique
🌘 5. Modifie le fichier spécifique à l’application dans PHP
Dans certains cas, il y a aussi un fichier spécifique à l’application dans la configuration du pool de PHP. Ce fichier va toujours passer en priorité sur la configuration globale et est activé lorsqu’il y a une session PHP de démarrée sur le socket en question. Il y a un fichier pour chaque application et pour chaque version de PHP. C’est donc une bonne chose de valider quelle version de PHP est utilisée si tu as de la difficulté à trouver le bon fichier.
Comment trouver les fichiers de pool PHP :
# Lister tous les fichiers de pool PHP
find /etc/php -name "*.conf" -path "*/pool.d/*" 2>/dev/null
# Vérifier les pools PHP actifs
ls -la /etc/php/8.x/fpm/pool.d/
# Vérifier la configuration des pools
systemctl status php*-fpm
sudo nano /etc/php/8.2/fpm/pool.d/castopod.conf
Explication du chemin :
/etc/php/8.2/fpm/pool.d/: Répertoire des fichiers de pool pour PHP 8.2castopod.conf: Fichier de pool spécifique à l’application Castopod- Fonction : Chaque pool peut avoir sa propre configuration PHP, prioritaire sur la configuration globale
Ce sont les 3 mêmes variables qu’on a modifié précédemment, mais présentées différemment.
php_admin_value[upload_max_filesize] = 512M
php_admin_value[post_max_size] = 512M
php_admin_value[memory_limit] = 512M
Explication de la syntaxe du pool PHP :
php_admin_value[...]: Définit une valeur de configuration PHP pour ce pool spécifique- Différence avec php.ini : Ces valeurs sont prioritaires sur celles du php.ini global
- Portée : S’applique uniquement aux requêtes traitées par ce pool PHP
- Avantage : Permet d’avoir des configurations différentes pour chaque application
Autre paramètres de pool utiles :
; Timeout pour les requêtes
request_terminate_timeout = 300s
🌘 6. Redémarre le service PHP
Pour la plupart des serveurs, utilise:
sudo systemctl restart php*.fpm.service
Explication détaillée de la commande :
php*.fpm.service: Le*est un joker qui correspond à n’importe quelle version PHP- Exemples de correspondance :
php8.2-fpm.service,php8.1-fpm.service,php7.4-fpm.service - Fonction : Redémarre tous les services PHP-FPM installés
- Alternative plus précise :
sudo systemctl restart php8.2-fpm.service
Commandes alternatives pour différentes distributions :
Pour les systèmes plus anciens :
sudo /etc/init.d/php[version].fpm reload && restart ;
Explication des commandes anciennes :
/etc/init.d/: Ancien système d’initialisation (SysVinit)reload: Recharge la configuration sans redémarrer les processusrestart: Redémarre complètement le service&&: Exécute la deuxième commande seulement si la première réussit
🌘 Conseils d’utilisation selon ta configuration
- Pour des fichiers audio/vidéo (taille moyenne):
upload_max_filesize = 512M
post_max_size = 512M
memory_limit = 512M # Si mémoire est limitée, augmentez à la volée ces paramètres!
Pourquoi ces valeurs pour les fichiers média :
-
Les fichiers audio/vidéo peuvent être volumineux (50MB à 500MB)
-
512M permet des fichiers de taille raisonnable sans surcharger le serveur
-
La mémoire limitée à 512M évite que PHP consomme trop de ressources
-
Pour des fichiers volumineux (>500MB):
upload_max_filesize = 1024M # ou même plus selon la RAM disponible
post_max_size = 4096M
Pourquoi ces valeurs pour les gros fichiers :
upload_max_filesize: Permet les fichiers très volumineuxpost_max_size: Mis plus haut pour permettre les métadonnées supplémentaires- Attention : Ces valeurs nécessitent beaucoup de ressources serveur
🌘 Précautions
- Évalue d’abord la capacité mémoire de ton serveur:
"free -h && df -h /var/www" ; "Pour estimer l'espace disponible"
Explication des commandes de vérification :
-
free -h: Affiche la mémoire disponible avec des unités lisibles (human-readable)total: Mémoire totaleused: Mémoire utiliséefree: Mémoire libreavailable: Mémoire disponible pour les nouveaux processus
-
df -h /var/www: Affiche l’espace disque sur la partition contenant/var/wwwSize: Taille totale de la partitionUsed: Espace utiliséAvailable: Espace disponibleUse%: Pourcentage d’utilisation
-
Crée une copie de sauvegarde du fichier php.ini avant modification
Change x pour ta sous-version
cp /etc/php/8.x/fpm/php.ini /etc/php/8.x/fpm/php.ini.backup
Explication de la commande de sauvegarde :
cp: Commande pour copier des fichiers/etc/php/8.x/fpm/php.ini: Fichier source à copier/etc/php/8.x/fpm/php.ini.backup: Fichier de destination avec extension.backup- Bonnes pratiques :
- Garder plusieurs sauvegardes avec des timestamps :
cp php.ini php.ini.backup.$(date +%Y%m%d_%H%M%S) - Sauvegarder avant chaque modification importante
- Tester les modifications dans un environnement de développement
- Garder plusieurs sauvegardes avec des timestamps :
🌘 Vérification des modifications
Après avoir appliqué toutes les modifications, voici comment vérifier qu’elles sont effectives :
🌘 Vérification via ligne de commande
# Vérifier la configuration PHP CLI
php -r "echo 'upload_max_filesize: ' . ini_get('upload_max_filesize') . PHP_EOL;"
php -r "echo 'post_max_size: ' . ini_get('post_max_size') . PHP_EOL;"
php -r "echo 'memory_limit: ' . ini_get('memory_limit') . PHP_EOL;"
# Vérifier la configuration PHP-FPM
sudo php-fpm8.2 -t # Tester la syntaxe de la configuration
🌘 Vérification de la configuration Nginx
# Tester la syntaxe de la configuration Nginx
sudo nginx -t
# Vérifier la valeur de client_max_body_size
sudo nginx -T 2>/dev/null | grep -A5 -B5 "client_max_body_size"
🌘 Dépannage des problèmes courants
🌘 Problème 1 : Les modifications ne semblent pas prises en compte
# Vérifier que le bon fichier php.ini est utilisé
php -i | grep "Loaded Configuration File"
# Vérifier que le bon pool PHP est utilisé
ps aux | grep "php-fpm"
🌘 Problème 2 : Erreur 413 Request Entity Too Large
C’est une erreur Nginx. Vérifie que client_max_body_size est bien configuré dans la bonne section du fichier Nginx.
🌘 Problème 3 : Erreur de mémoire lors de l’upload
Augmente memory_limit dans le fichier php.ini ou dans le pool spécifique.
🌘 Problème 4 : Le timeout est atteint
# Augmenter les timeouts dans Nginx
client_body_timeout 300s;
client_header_timeout 300s;
keepalive_timeout 300s;
send_timeout 300s;
# Augmenter le timeout dans le pool PHP
request_terminate_timeout = 300s
🌘 Sécurité et bonnes pratiques
🌘 Limites recommandées selon le type d’application
- Site web standard :
32Mà64M - Blog/CMS :
64Mà128M - Application média :
128Mà512M - Application d’upload professionnel :
512Mà1024M
🌘 Mesures de sécurité
- Valider les types de fichiers : Utilise la validation côté serveur pour n’accepter que les types de fichiers autorisés
- Scanner les fichiers uploadés : Utilise des antivirus ou des scanners de malwares
- Limiter la bande passante : Configure Nginx pour limiter la vitesse d’upload
- Surveiller l’utilisation : Met en place des alertes si l’utilisation de la mémoire ou du disque devient élevée
🌘 Surveillance
# Surveiller l'utilisation de la mémoire
free -h
# Surveiller l'utilisation du disque
df -h
# Surveiller les processus PHP
ps aux | grep php-fpm
# Surveiller les erreurs PHP
tail -f /var/log/php8.2-fpm.log
🌘 Résumé des commandes essentielles
🌘 Connexion et navigation
ssh [utilisateur]@[serveur] # Connexion SSH
find /etc -name "php.ini" # Trouver les fichiers php.ini
php -v # Vérifier la version PHP
🌘 Modification des configurations
sudo nano /etc/php/8.x/fpm/php.ini # Éditer php.ini
sudo nano /etc/nginx/sites-available/ton-site # Éditer config Nginx
sudo nano /etc/php/8.x/fpm/pool.d/ton-app.conf # Éditer config pool PHP
🌘 Redémarrage des services
sudo systemctl restart nginx # Redémarrer Nginx
sudo systemctl restart php8.x-fpm # Redémarrer PHP-FPM
sudo systemctl reload nginx # Recharger Nginx (en douceur)
🌘 Vérification
sudo nginx -t # Tester config Nginx
sudo php-fpm8.x -t # Tester config PHP
php -i | grep "upload_max_filesize" # Vérifier config PHP
En suivant ce guide détaillé, tu devrais pouvoir ajuster correctement les limites de chargement de fichiers sur ton serveur PHP et résoudre les problèmes d’upload de fichiers volumineux.