Le fichier de configuration php.ini

Le fichier de configuration php.ini

Rédigé le

PHP.ini est un fichier de configuration utile qui est utilisé pour personnaliser le comportement de PHP à l'exécution. Cela permet une administration facile dans la façon dont vous gérez le serveur Web Apache à l'aide des fichiers de configuration. Certaines installations PHP disposent de 2 fichiers.

Les paramètres dans lesquels le répertoire de téléchargement, enregistrent les variables globales, affichent les erreurs, les erreurs de journal, le paramètre de taille de téléchargement maximale, le temps maximal pour exécuter un script et d'autres configurations sont écrits dans ce fichier.

Lorsque le serveur PHP démarre, il recherche d'abord le fichier PHP.ini pour charger diverses valeurs de paramètres. Si vous avez fait des modifications dans votre fichier, vous devez alors redémarrer votre serveur pour vérifier que les modifications sont bien effectuées. Par défaut, la copie de ce fichier ini se trouve dans /usr/local/lib/php/ pour l'installation sous UNIX.

Si vous voulez faire des configurations personnalisées, vous pouvez aussi écrire votre propre fichier php.ini.

Que fait le fichier PHP.ini ?

Que vous soyez un débutant en PHP ou un développeur chevronné, je suis sûr que vous avez entendu parler de php.ini : le plus important fichier de configuration PHP. Lorsque PHP est exécuté, il recherche le fichier php.ini à certains endroits spécifiques et le charge. Ce fichier vous permet de configurer quelques paramètres importants dont vous devez être conscient. Très souvent, vous constaterez que vous devez modifier les paramètres dans le fichier php.ini.

D'autre part, il est certainement possible que vous n'ayez jamais eu besoin de modifier le php.ini. PHP peut fonctionner sans problème avec les paramètres fournis dans le fichier php.ini par défaut, puisque PHP est livré avec ces paramètres recommandés par défaut. En fait, il n'y a pas de paramètres de configuration critiques que vous devez définir pour faire fonctionner PHP.

Le fichier php.ini contient tous les paramètres de configuration actuels de PHP : tels que le temps d'exécution, la limite de mémoire, etc. C'est également de cette manière que les modules PECL sont activés, tels que memcache, APC.. Ce fichier vous permet d'outrepasser les paramètres de configuration par défaut des serveurs.

Cependant, le fichier php.ini fournit quelques réglages importants que vous souhaitez vous familiariser. En fait, en tant que développeur PHP, c'est inévitable, et vous le rencontrerez tôt ou tard.

Où se trouve le fichier de configuration ?

Dans cette section, nous allons voir comment trouver le fichier php.ini qui est chargé lorsque vous exécutez le script PHP. Cela peut être délicat, car l'emplacement du fichier varie énormément en fonction de l'environnement dans lequel vous exécutez PHP. Si vous êtes sous Windows, vous trouverez probablement le fichier dans le répertoire de votre installation dans le lecteur système. En revanche, si vous utilisez un autre système d'exploitation, il est difficile de deviner l'emplacement exact du fichier - il y a plusieurs possibilités.

C'est là que la fonction phpinfo() vient à la rescousse. Elle vous indiquera où se trouve le fiovhier php.ini, et vous fournira également toutes les informations de configuration importantes de PHP.

Vous pouvez exécuter phpinfo() en créant un fichier .php et en appelant cette fonction. Allez-y, créez le fichier phpinfo.php avec le contenu suivant et placez-le à la racine de votre document :

phpinfo();

Chargez ce fichier dans votre navigateur, et vous devriez voir la sortie de phpinfo(). Cherchez la section suivante :

fichier de configuration avec phpinfo()
Fichier de configuration avec phpinfo().

Comme vous pouvez le voir, il y a deux sections. Le premier, Configuration File (php.ini) Path, indique le chemin par défaut du fichier dans votre système. Et le second, Loaded Configuration File, est le chemin d'accès à partir duquel le fichier est chargé lorsque PHP est exécuté.

Vous pouvez donc éditer le fichier php.ini indiqué dans la section Loaded Configuration File, et cela devrait fonctionner dans la plupart des cas. Bien entendu, si vous utilisez PHP comme module Apache, vous devez redémarrer le serveur Apache pour vous assurer que les modifications que vous avez apportées au fichier soient prises en compte.

D'autre part, si vous utilisez un logiciel comme WAMP ou XAMPP pour exécuter, il est encore plus facile de modifier le fichier php.ini - vous pouvez y accéder directement via l'interface utilisateur de WAMP ou XAMPP.

Paramètres importants

Le fichier php.ini fournit un grand nombre de directives de configuration qui vous permettent de modifier divers comportements de PHP. En fait, lorsque vous ouvrez le fichier php.ini, vous pouvez être submergé par le nombre de directives qu'il fournit. Je vais essayer de les regrouper en fonction de leur comportement, et j'espère que ce sera facile à comprendre pour vous.

Bien sûr, nous ne passerons pas en revue toutes les directives, mais je vais essayer de couvrir les plus importantes.

Examinons les types de directives dont nous allons discuter :

  • - les directives sur le traitement des erreurs
  • - les directives relatives au téléchargement de fichiers
  • - les directives relatives à la sécurité
  • - les directives de session
  • - les directives diverses

Directives sur le traitement des erreurs

Dans cette section, nous passerons en revue les directives relatives à la gestion des erreurs et utiles pour le débogage en cours de développement.

La directive display_errors vous permet de contrôler si des erreurs sont affichées à l'écran pendant l'exécution du script. Vous pouvez le mettre sur Activé si vous voulez que les erreurs soient affichées à l'écran et sur Désactivé si vous voulez le désactiver. Il est important que vous n'activiez jamais cette fonction sur un site de production : cela ralentirait votre site et pourrait donner aux pirates des indices précieux sur les failles de sécurité de votre site.

La directive error_reporting vous permet de fixer le niveau de notification des erreurs. Cette directive fonctionne principalement en conjonction avec la directive display_errors. Cette directive peut accepter les constantes E_ALL, E_NOTICE, E_STRICT et E_DEPRECATED.

Vous pouvez le régler sur E_ALL si vous voulez afficher tous les types d'erreurs comme les erreurs fatales, les avertissements, les fonctions obsolètes, etc. Vous pouvez également combiner les différentes valeurs si vous souhaitez filtrer des erreurs spécifiques. Par exemple, si vous voulez afficher toutes les erreurs sauf les avis, vous pouvez le régler sur E_ALL & ~E_NOTICE.

Sur un site de production, vous devez vous assurer que PHP n'affiche pas d'erreurs dans le navigateur du client. Au lieu de cela, vous pouvez enregistrer les erreurs quelque part afin de pouvoir vous y référer plus tard si quelque chose ne va pas avec votre site. La directive error_log vous permet de définir le nom du fichier où les erreurs seront enregistrées. Vous devez vous assurer que ce fichier est accessible en écriture par l'utilisateur du serveur web.

Directives relatives au téléchargement de fichiers

Dans cette section, nous verrons quelques directives importantes qui vous permettent d'activer les capacités de téléchargement de fichiers dans vos formulaires PHP.

file_uploads, il s'agit d'une directive booléenne qui vous permet d'activer le téléchargement de fichiers par HTTP. Si vous le définissez sur Activé, vous pouvez utiliser le champ de fichier dans vos formulaires et les utilisateurs pourront télécharger des fichiers depuis leur ordinateur. D'un autre côté, si vous le désactivez, le téléchargement de fichiers est complètement désactivé.

Si vous avez activé la fonction de téléchargement de fichiers sur votre site web et que vous rencontrez des difficultés pour télécharger des fichiers, c'est la directive upload_max_filesize que vous devez vérifier en premier lieu. Elle vous permet de fixer la taille maximale d'un fichier qui peut être téléchargé.

Par défaut, il est réglé sur 2 Mo, et les utilisateurs ne peuvent donc pas télécharger de fichiers de plus de 2 Mo. Vous pouvez ajuster cette valeur en fonction de vos besoins - souvent, vous voudrez augmenter cette limite pour permettre le téléchargement de fichiers plus volumineux.

Le paramètre post_max_size vous permet de fixer la taille maximale des données POST dans vos formulaires. Lorsqu'un utilisateur soumet un formulaire avec la méthode POST, la taille totale des données POST ne doit pas dépasser la valeur que vous avez fixée dans cette directive. Cette valeur doit être supérieure à celle que vous avez définie dans la directive upload_max_filesize, puisque les téléchargements de fichiers sont traités avec des demandes POST.

Directives relatives à la sécurité

Dans cette section, nous verrons quelques directives importantes qui sont liées à la sécurité.

La directive allow_url_fopen est désactivée par défaut. Mais lorsqu'il est activé, il permet l'inclusion de fichiers distants dans les fonctions de fichiers PHP. Cela signifie que vos fichiers PHP peuvent inclure du code provenant d'autres serveurs. Si votre code fait l'objet d'une attaque par injection, l'inclusion de fichiers à distance facilitera grandement le détournement de votre serveur par un utilisateur malveillant.

La directive allow_url_include est similaire à la directive allow_url_fopen, mais elle permet l'inclusion de fichiers distants dans les fonctions d'inclusion. Elle permet d'inclure des fichiers distants dans les fonctions include, include_once, require et require_once.

Si vous voulez activer cette directive, vous devez vous assurer que vous avez également activé la directive allow_url_fopen.

Directives de session

La gestion des sessions est l'un des aspects les plus importants lorsque vous travaillez avec PHP. Dans cette section, nous allons passer en revue quelques directives importantes sur les sessions.

La directive session.name vous permet de définir le nom du cookie de session. Par défaut, il est défini sur PHPSESSID, mais vous pouvez le changer pour autre chose en utilisant cette directive.

Si vous définissez la valeur de la directive session.auto_start à 1, le module de session de PHP démarre automatiquement une session à chaque demande, et vous n'avez donc pas à utiliser la fonction session_start dans vos scripts.

La directive session.cookie_lifetime vous permet de définir la durée de vie d'un cookie de session. Par défaut, elle est fixée à 0 seconde, et cela signifie que le cookie de session est supprimé lorsque le navigateur est fermé. C'est un réglage très utile qui vous permet de mettre en place une fonctionnalité du type "se souvenir de moi", permettant à vos utilisateurs de reprendre là où ils se sont arrêtés sur votre site.

Directives diverses

Dans cette dernière section, nous verrons quelques autres directives qui sont importantes dans le contexte de l'exécution de scripts PHP.

La directive memory_limit vous permet de limiter la quantité maximale de mémoire qu'un script est autorisé à utiliser. Vous pouvez affiner cette directive en fonction de vos besoins, et vous ne devez pas la fixer trop haute pour éviter les pannes de mémoire sur votre serveur - des scripts mal écrits ou bogués peuvent consommer toute la mémoire de votre serveur si vous les laissez faire !

La directive max_execution_time fixe la durée maximale d'exécution d'un script avant qu'il ne soit terminé. La valeur par défaut est de 30 secondes, et vous pouvez l'augmenter jusqu'à une limite raisonnable selon vos besoins si vous le souhaitez. Comme pour la directive memory_limit, vous ne devez pas la fixer trop haut pour éviter des problèmes sur votre serveur.

La directive max_input_time vous permet de définir la durée maximale pendant laquelle un script est autorisé à analyser les données de formulaire entrantes à partir d'un GET ou d'un POST.

Si vous avez des formulaires sur votre site web qui soumettent une grande quantité de données, vous voudrez peut-être augmenter la valeur de cette directive.

Trouver le fichier

Unix

Vous pouvez utiliser le programme find pour trouver tous les fichiers php.ini sur votre système.

find / -name "php.ini"

Vous pouvez utiliser le programme de localisation pour trouver tous les fichiers php.ini dans la base de données de localisation (qui peut ne pas être toujours à jour).

locate php.ini

Si vous travaillez localement, la recherche de php.ini dépend de l'environnement du serveur que vous utilisez. Passons rapidement en revue quelques-uns des plus populaires.

WAMP

Cliquez à gauche sur l'icône de votre serveur WAPM, puis allez dans PHP > php.ini

fichier php.ini sous WAMP
Fichier php.ini sous WAMP.

XAMPP

Lancez votre installation de XAMPP, cliquez avec le bouton droit sur le bouton "Config".

accéder au fichier avec XAMPP.
Accéder au fichier avec XAMPP.

MAMP

Si vous développez des sites web en utilisant la norme MAMP et que vous devez modifier le fichier php.ini, voici un conseil rapide pour savoir où trouver le fichier.

Tout d'abord, déterminez quelle version de PHP vous utilisez. Si vous n'êtes pas sûr de la version de PHP que vous utilisez actuellement, sélectionnez phpInfo sur l'écran de démarrage du MAMP et jetez un coup d'œil.

Si vous utilisez MAMP Pro, il est alors plus facile de trouver le fichier php.ini. Il vous suffit d'ouvrir MAMP Pro, puis de cliquer sur Fichier > Modifier le modèle > PHP et de choisir la version de PHP que vous utilisez. Modifiez le fichier php.ini dans un éditeur et cliquez sur enregistrer, puis redémarrez MAMP pour que les modifications prennent effet.

fichier ini avec MAMP Pro
Fichier ini avec MAMP Pro.

Si vous utilisez MAMP Standard (la version gratuite), vous devez ouvrir /Applications/MAMP/bin/php/{VOTRE VERSION PHP}/conf/php.ini selon la version de PHP que vous utilisez. Modifiez le fichier php.ini dans un éditeur et cliquez sur enregistrer, puis redémarrez MAMP pour que les modifications prennent effet.

Linux

Si vous êtes sous Linux, exécutez la commande suivante dans le terminal :

php -i | grep php.ini

Dans la plupart des cas, le php.ini se trouve dans le "Loaded Configuration File", mais s'il n'y est pas, remplacez la chaîne "Loaded Configuration File" par "Configuration File".

Options du langage

Options de configuration

NomDéfautModifiableHistorique
short_open_tag1PHP_INI_ALL-
asp_tags0PHP_INI_PERDIRDisponible jusqu'en PHP 7.0.0
precision14PHP_INI_ALL-
serialize_precision-1PHP_INI_ALLAntérieur à PHP 5.3.6, la valeur par défaut était 100. Antérieur à PHP 7.1.0, la valeur par défaut était 17
y2k_compliance1PHP_INI_ALLDisponible jusqu'en PHP 5.4.0
allow_call_time_pass_reference1PHP_INI_PERDIRDisponible jusqu'en PHP 5.4.0
disable_functions-PHP_INI_SYSTEM uniquement-
disable_classes-php.ini uniquement-
exit_on_timeout-PHP_INI_ALLDisponible à partir de PHP 5.3.0
expose_php1php.ini uniquement-
hard_timeout2PHP_INI_SYSTEMDisponible à partir de PHP 7.1.0
zend.multibyte0PHP_INI_ALLDisponible à partir de PHP 5.4.0
zend.script_encodingNULLPHP_INI_ALLDisponible à partir de PHP 5.4.0
zend.detect-unicodeNULLPHP_INI_ALLDisponible à partir de PHP 5.4.0
zend.signal_check0PHP_INI_SYSTEMDisponible à partir de PHP 5.4.0
zend.assertions1PHP_INI_ALL avec des restrictionsDisponible à partir de PHP 7.0.0
zend.ze1_compatibility_mode0PHP_INI_ALLDisponible jusqu'en PHP 5.3.0
detect_unicode1PHP_INI_ALLDisponible à partir de PHP 5.1.0. Renommé en zend.detect-unicode depuis PHP 5.4.0.

Limite des ressources

NomDéfautModifiableHistorique
memory_limit128MPHP_INI_ALL"8M" avant PHP 5.2.0, "16M" depuis PHP 5.2.0

Réglage de Performance

NomDéfautModifiableHistorique
realpath_cache_size4MPHP_INI_SYSTEMDisponible à partir de PHP 5.1.0. Antérieur à PHP 7.0.16 et 7.1.2, la valeur par défaut était "16K"
realpath_cache_ttl120PHP_INI_SYSTEMDisponible à partir de PHP 5.1.0

Gestion des données

NomDéfautModifiableHistorique
arg_separator.output&PHP_INI_ALL-
arg_separator.input&PHP_INI_PERDIR-
variables_orderEGPCSPHP_INI_PERDIRPHP_INI_ALL pour PHP <= 5.0.5
request_order-PHP_INI_SYSTEM|PHP_INI_PERDIRDisponible à partir de PHP 5.3.0
auto_globals_jit1PHP_INI_PERDIRDisponible à partir de PHP 5.0.0
register_globals0PHP_INI_PERDIRDisponible jusqu'en PHP 5.4.0
register_argc_argv1PHP_INI_PERDIR-
register_long_arrays1PHP_INI_PERDIRObsolète en PHP 5.3.0. Retiré depuis PHP 5.4.0
enable_post_data_reading1PHP_INI_PERDIRDisponible à partir de PHP 5.4.0
post_max_size8MPHP_INI_PERDIR-
auto_prepend_fileNULLPHP_INI_PERDIR-
auto_append_fileNULLPHP_INI_PERDIR-
default_mimetypetext/htmlPHP_INI_ALL-
default_charsetUTF-8PHP_INI_ALL Par défaut "UTF-8" depuis PHP 5.6.0, vide pour PHP < 5.6.0
always_populate_raw_post_data0PHP_INI_PERDIRDisponible jusqu'en PHP 7.0.0

Chemins et répertoires

NomDéfautModifiableHistorique
include_path.;/chemin/vers/php/pearPHP_INI_ALL-
open_basedirNULLPHP_INI_ALLPHP_INI_SYSTEM en PHP < 5.3.0
doc_rootNULLPHP_INI_SYSTEM-
user_dirNULLPHP_INI_SYSTEM-
user_ini.cache_ttl300PHP_INI_SYSTEMDisponible à partir de PHP 5.3.0
user_ini.filename.user.iniPHP_INI_SYSTEMDisponible à partir de PHP 5.3.0
extension_dir/chemin/vers/phpPHP_INI_SYSTEM-
extensionNULLphp.ini uniquement-
zend_extensionNULLphp.ini uniquement-
zend_extension_debugNULLphp.ini uniquementDisponible avant PHP 5.3.0
zend_extension_debug_tsNULLphp.ini uniquementDisponible avant PHP 5.3.0
zend_extension_tsNULLPHP_INI_SYSTEMDisponible avant PHP 5.3.0
cgi.check_shebang_line1PHP_INI_SYSTEMDisponible à partir de PHP 5.2.0
cgi.discard_path0PHP_INI_SYSTEMDisponible à partir de PHP 5.3.0
cgi.fix_pathinfo1PHP_INI_SYSTEMPHP_INI_ALL dans les versions inférieures à PHP 5.2.1
cgi.force_redirect1PHP_INI_SYSTEMPHP_INI_ALL dans les versions inférieures à PHP 5.2.1
cgi.nph0PHP_INI_SYSTEMDisponible à partir de PHP 5.3.0
cgi.redirect_status_envNULLtextePHP_INI_ALL dans les versions inférieures à PHP 5.2.1
cgi.rfc2616_headers0PHP_INI_ALL-
fastcgi.impersonate0PHP_INI_SYSTEMPHP_INI_ALL dans les versions inférieures à PHP 5.2.1
fastcgi.logging1PHP_INI_SYSTEMPHP_INI_ALL dans les versions inférieures à PHP 5.2.1

Chargement de fichiers

NomDéfautModifiableHistorique
file_uploads1PHP_INI_SYSTEM-
upload_tmp_dirNULLPHP_INI_SYSTEM-
max_input_nesting_level64PHP_INI_PERDIRDisponible à partir de PHP 5.3.9
max_input_vars1000PHP_INI_PERDIRDisponible à partir de PHP 5.3.9
upload_max_filesize2MPHP_INI_PERDIR-
max_file_uploads20PHP_INI_SYSTEMDisponible à partir de PHP 5.2.12

Historique

VersionDescription
7.0.0Les marqueurs croisillons (#) ne sont plus reconnus comme des commentaires.
5.3.0Les marqueurs croisillons (#) ne doivent plus être utilisés comme commentaires et vont lever un avertissement pour dépréciation si utilisé.
5.2.0La variable d'environnement PHP_INI_SCAN_DIR peut être définie pour remplacer la valeur définie par le script de configuration.
5.1.0Il est possible de faire référence à des variables existantes de .ini à l'intérieur de fichier .ini.

Conclusion

Il est impossible de couvrir toutes les directives dans un seul article, mais j'ai essayé de couvrir les plus importantes. N'hésitez pas à poser vos questions si vous voulez en savoir plus sur une directive particulière, et je serai heureux de vous aider ! En tant que développeur PHP, il est important que vous compreniez les différentes directives du fichier php.ini, et cela devrait vous aider à affiner votre configuration PHP en fonction de vos besoins.

Comme vous pouvez le voir, trouver le php.ini peut être à la fois délicat et facile. J'ai essayé de couvrir les solutions et les environnements de serveur les plus courants, et j'espère que ce guide vous aidera à trouver enfin ce fichier. Si vous connaissez d'autres moyens de trouver php.ini, n'hésitez pas à partager vos idées dans les commentaires ci-dessous.

Manudog