PHP : configuration
Où se trouve la configuration
Section intitulée « Où se trouve la configuration »php --ini # fichiers lus par la CLIphp -i | grep -E "Loaded Configuration|Scan this dir"| Contexte | Fichier |
|---|---|
| CLI | /etc/php/<version>/cli/php.ini |
| PHP-FPM (web) | /etc/php/<version>/fpm/php.ini |
| Réglages additionnels | /etc/php/<version>/fpm/conf.d/*.ini |
Plutôt que d’éditer php.ini, créer un fichier conf.d dédié, qui survit aux mises à jour :
sudo tee /etc/php/8.3/fpm/conf.d/99-monapp.ini <<'CONF'memory_limit = 256Mupload_max_filesize = 20Mpost_max_size = 25Mmax_execution_time = 60CONFsudo systemctl reload php8.3-fpmRemplacer 8.3 par 8.5 sur Ubuntu 26.04. Les fichiers sont lus dans l’ordre alphabétique : le préfixe 99- garantit qu’ils passent en dernier.
Réglages de production
Section intitulée « Réglages de production »expose_php = Offdisplay_errors = Offdisplay_startup_errors = Offlog_errors = Onerror_log = /var/log/php_erreurs.logerror_reporting = E_ALLhtml_errors = Offsession.cookie_httponly = 1session.cookie_secure = 1session.use_strict_mode = 1| Réglage | Raison |
|---|---|
display_errors = Off |
Ne pas afficher les erreurs aux visiteurs (chemins, requêtes SQL) |
log_errors = On |
Les enregistrer dans un journal |
expose_php = Off |
Ne pas annoncer PHP dans les en-têtes |
session.cookie_* |
Cookie de session limité à HTTPS et inaccessible au JavaScript |
Créer le journal avec les bons droits :
sudo touch /var/log/php_erreurs.logsudo chown www-data:adm /var/log/php_erreurs.logRéglages de développement
Section intitulée « Réglages de développement »display_errors = Ondisplay_startup_errors = Onerror_reporting = E_ALLSur un poste de développement uniquement (jamais sur un serveur public).
Limites courantes
Section intitulée « Limites courantes »| Réglage | Rôle |
|---|---|
memory_limit |
Mémoire maximale par requête (128M par défaut) |
max_execution_time |
Durée maximale d’un script web, en secondes |
upload_max_filesize |
Taille maximale d’un fichier téléversé |
post_max_size |
Taille maximale d’une requête POST : au moins upload_max_filesize |
max_input_vars |
Nombre maximal de champs de formulaire |
date.timezone |
Fuseau horaire (Europe/Paris) |
Côté serveur web, aligner aussi la limite de corps de requête (client_max_body_size pour Nginx), sinon un envoi volumineux échoue avant PHP.
Met en cache le code compilé : gain important en production.
opcache.enable = 1opcache.memory_consumption = 128opcache.interned_strings_buffer = 16opcache.max_accelerated_files = 10000opcache.validate_timestamps = 1opcache.revalidate_freq = 2Avec opcache.validate_timestamps = 0, PHP ne relit plus les fichiers : recharger PHP-FPM à chaque déploiement (sudo systemctl reload php8.3-fpm). OPcache est activé par défaut pour PHP-FPM sous Ubuntu ; la CLI ne l’utilise pas (opcache.enable_cli = 0).
Vérifier la configuration effective
Section intitulée « Vérifier la configuration effective »php -i | grep memory_limit # CLIphp -r 'echo ini_get("memory_limit"), "\n";'Pour le web, créer temporairement public/info.php :
<?php phpinfo();Le lire dans le navigateur, puis le supprimer : il expose la configuration du serveur. Alternative sans exposition : sudo php-fpm8.3 -i.
Gérer les extensions
Section intitulée « Gérer les extensions »sudo phpenmod mbstring # activesudo phpdismod xdebug # désactivephp -m # modules chargésphp --ri mbstring # détail d'une extensionVariables d’environnement
Section intitulée « Variables d’environnement »PHP-FPM efface l’environnement : les définir dans le pool (env[APP_ENV] = production) ou charger un fichier .env en dehors de la racine web. Ne jamais versionner les secrets (voir Composer pour .gitignore).
Dépannage
Section intitulée « Dépannage »| Symptôme | Piste |
|---|---|
| Réglage sans effet sur le site | Mauvais fichier (CLI au lieu de FPM) ou service non rechargé : sudo systemctl reload php8.3-fpm |
Allowed memory size of … bytes exhausted |
Augmenter memory_limit ou corriger la fuite |
| Téléversement qui échoue | upload_max_filesize, post_max_size et limite du serveur web |
Maximum execution time of 30 seconds exceeded |
max_execution_time ; pour un long traitement, utiliser la CLI |
| Page blanche | display_errors désactivé : lire le journal d’erreurs |
Avertissement date.timezone |
Définir date.timezone = Europe/Paris |
Ubuntu 24.04 et 26.04 : différences à connaître
Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »La structure de /etc/php/<version>/ est identique ; seul le numéro de version change. Certaines directives php.ini sont retirées au fil des versions : après une migration vers 8.5, lancer php -i ou consulter le journal pour détecter les directives obsolètes.