Un upload de 10 Mo qui échoue en silence, un import CSV qui crashe à la moitié, une page WooCommerce qui répond par un écran blanc : derrière ces symptômes, ce sont quasi toujours les limites PHP qu'il faut regarder. Sur Plesk, vous les gérez vous-même en quelques clics.
Où modifier ces limites ?
Sur nos hébergements mutualisés :
- Connectez-vous à Plesk.
- Allez dans Websites & Domains, cliquez sur votre domaine.
- Ouvrez PHP Settings (dans la colonne Dev Tools, ou via Hosting Settings).
- Dépliez la section Performance and security settings.
- Modifiez les valeurs, cliquez sur OK. Les nouveaux réglages s'appliquent au prochain hit PHP.
php.ini global, et sont spécifiques à ce domaine. Vous pouvez donc avoir un WordPress en 256M et un PrestaShop en 512M sur le même abonnement.
Sur un VPS, les mêmes directives se modifient dans le php.ini de votre version de PHP (ex : /etc/php/8.3/fpm/php.ini), suivi d'un systemctl reload php8.3-fpm.
Les directives qui comptent
memory_limit
Mémoire maximum qu'un script PHP peut consommer. Au-delà, PHP tue le script avec un Fatal error: Allowed memory size of X bytes exhausted.
- Défaut PHP : 128M.
- WordPress seul : 256M confortable.
- WooCommerce, gros plugins : 512M.
- Import massif, admin Elementor lourd : jusqu'à 1024M ponctuellement.
upload_max_filesize
Taille maximum d'un fichier reçu via $_FILES (formulaire d'upload, media WordPress, import theme/plugin).
post_max_size
Taille maximum de la requête POST complète (tous les champs et fichiers additionnés). Doit être supérieure ou égale à upload_max_filesize, sinon l'upload échoue avant même de démarrer.
upload_max_filesize ≥ 20M et post_max_size ≥ 100M. C'est la taille totale POST qui compte.
max_execution_time
Durée maximum d'exécution d'un script, en secondes. Au-delà, PHP coupe avec un Maximum execution time exceeded.
- Défaut : 30 s.
- Import CSV, régénération d'images : 120 à 300 s.
- Cron long (via
php script.phpen CLI) :max_execution_timeest ignoré en mode CLI.
max_input_vars
Nombre maximum de variables dans une requête (GET + POST + COOKIE). Invisible en temps normal, mais tue silencieusement les gros formulaires : menu WordPress avec 200 éléments, configuration WooCommerce lourde, ACF avec beaucoup de champs.
- Défaut PHP : 1000.
- Symptôme classique : vous sauvegardez un menu WordPress, il se tronque sans erreur.
- Valeur confortable : 3000 à 5000.
max_input_time
Temps maximum pour recevoir les données POST (distinct de l'exécution). Pertinent pour de très gros uploads sur lignes lentes. -1 pour illimité, ou 300 s typique.
Valeurs typiques par CMS
| Directive | WordPress | WooCommerce | PrestaShop | Drupal |
|---|---|---|---|---|
memory_limit |
256M | 512M | 512M | 256M |
upload_max_filesize |
64M | 64M | 64M | 64M |
post_max_size |
128M | 128M | 128M | 128M |
max_execution_time |
120 | 180 | 300 | 120 |
max_input_vars |
3000 | 5000 | 5000 | 3000 |
Ces valeurs sont confortables sans être gaspillées. Ne partez pas sur du 2048M « au cas où » : vous partagez la RAM du serveur avec d'autres clients (en mutualisé) ou vous vous privez de RAM pour MySQL et le cache (sur VPS).
Vérifier les valeurs actives
Avec phpinfo()
La méthode la plus complète. Créez un fichier phpinfo.php à la racine de votre site :
<?php phpinfo();
Ouvrez https://votre-domaine.fr/phpinfo.php, cherchez (Cmd+F / Ctrl+F) memory_limit, upload_max_filesize, etc. Notez la colonne Local Value (valeur effective pour ce domaine).
phpinfo() expose la version PHP, les modules, les chemins, les variables d'environnement. Une mine d'or pour un attaquant. Supprimez le fichier dès que vous avez votre info, ou protégez-le par un .htaccess.
En ligne de commande (SSH)
# Afficher toutes les directives
php -i | grep -E 'memory_limit|upload_max|post_max|execution_time|input_vars'
# Pour une version PHP spécifique
php8.3 -i | grep memory_limit
Dans un script PHP
<?php
echo 'memory_limit : ' . ini_get('memory_limit') . PHP_EOL;
echo 'upload_max_filesize : ' . ini_get('upload_max_filesize') . PHP_EOL;
echo 'post_max_size : ' . ini_get('post_max_size') . PHP_EOL;
echo 'max_execution_time : ' . ini_get('max_execution_time') . PHP_EOL;
echo 'max_input_vars : ' . ini_get('max_input_vars') . PHP_EOL;
Modifier ponctuellement depuis un script
Certaines directives peuvent être modifiées à la volée dans un script (uniquement celles listées INI_ALL ou INI_USER) :
<?php
// Pour un import long, au début du script
ini_set('memory_limit', '1024M');
set_time_limit(600); // secondes, 0 = illimité
// Votre logique d'import ici...
upload_max_filesize, post_max_size et max_input_vars ne peuvent pas être modifiés depuis un script : la requête est parsée avant même que PHP exécute la première ligne. Il faut passer par Plesk (ou php.ini sur VPS).
Limites de notre infrastructure
Nos hébergements Plesk autorisent des valeurs confortables pour tous les usages web classiques. Si vous avez besoin de dépasser les plafonds visibles dans l'interface (par exemple un upload de plusieurs Go pour une vidéothèque), ouvrez un ticket : on regarde ensemble si c'est possible sur votre abonnement ou si une formule VPS est plus adaptée.
Et côté Apache/Nginx ?
Une fois PHP configuré, vérifiez que le reste de la chaîne suit. Une 413 Request Entity Too Large sur un upload de 200 Mo ne vient pas de PHP mais du serveur web qui rejette la requête avant. Sur nos Plesk, client_max_body_size (Nginx proxy devant Apache) est aligné par défaut avec vos réglages PHP. Si un 413 apparaît malgré les bons réglages, ouvrez un ticket, on ajuste côté serveur.