Configuration à l'exécution Le fichier de configuration Le fichier de configuration (&php.ini;) est lu par PHP au démarrage. Si vous avez compilé PHP en module, le fichier n'est lu qu'une seule fois, au lancement du serveur web. Pour les versions CGI et CLI le fichier est lu à chaque invocation. Le &php.ini; est cherché dans ces endroits (et dans cet ordre) : L'endroit spécifique du module SAPI (la directive PHPIniDir d'Apache 2, l'option de la ligne de commande -c en CGI et en CLI) La variable d'environnement PHPRC. L'endroit où se trouve le fichier php.ini peut être définis pour différentes versions de PHP. La racine des clés de registre dépend de l'architecture 32 ou 64 bit de l'OS et de PHP. Pour un OS et PHP 32 bit ou un OS et PHP 64 bit, utiliser [HKEY_LOCAL_MACHINE\SOFTWARE\PHP] pour PHP 32 bit sur un OS 64 bit, utiliser [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP] à la place. Pour une installation avec la même architecture, les clés de registre suivantes sont cherchées dans cet ordre : [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z], [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y] and [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x], où x, y et z signifie les versions majeures, mineures et normales. Pour une architecture 32 bit de PHP sur un OS 64 bit, les clés de registre suivantes sont cherchées dans cet ordre : [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y.z], [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y] and [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x], où x, y et z signifie les versions majeures, mineures et normales. S'il y a une valeur pour IniFilePath dans ces clés, la première trouvée sera utilisée comme endroit où se trouve le fichier php.ini (uniquement sous Windows). [HKEY_LOCAL_MACHINE\SOFTWARE\PHP] ou [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP], valeur de IniFilePath (uniquement sous Windows). Le dossier courant de travail (sauf pour CLI) Le dossier du serveur web (pour les modules SAPI), ou le dossier contenant PHP (autrement sous Windows) Le dossier Windows (C:\windows ou C:\winnt) (pour Windows), ou l'option de compilation --with-config-file-path lors de la compilation Si le fichier php-SAPI.ini existe (où SAPI utilise SAPI, donc le nom du fichier est e.g. php-cli.ini ou php-apache.ini), il sera utilisé à la place du &php.ini;. Le nom SAPI peut être déterminé en utilisant la fonction php_sapi_name. Le serveur web Apache change ce dossier en dossier root au démarrage, ce qui fait que PHP essaye de lire &php.ini; depuis le système de fichiers racine s'il existe. Les variables d'environnements peuvent être utilisées dans le fichier &php.ini; comme ci-dessous. Les variables d'environnement dans un fichier &php.ini; Les directives &php.ini; sont directement documentées, par extensions, sur les pages respectives du manuel de ces extensions. La liste des directives internes est disponible en annexe. Il est probable que toutes les directives PHP ne sont pas documentées dans le manuel. Pour une liste complète des directives disponibles dans votre version de PHP, merci de lire les commentaires de votre propre fichier &php.ini;. Vous pouvez également trouver la dernière version du &php.ini; sur Git. Extrait du &php.ini; Il est possible de se référer à des variables .ini depuis des fichiers .ini. Par exemple : open_basedir = ${open_basedir} ":/new/dir". Lire un répertoire Il est possible de configurer PHP pour lire les fichiers .ini présent dans un dossier. après la lecture de &php.ini;. Cela est réglé lors de la compilation avec l'argument . Le dossier à lire peut être modifié lors de l'exécution par la définition de la variable d'environnement PHP_INI_SCAN_DIR. Il est possible de lire plusieurs dossiers en les séparant avec un séparateur de chemin spécifique à la plateforme (; pour Windows, NetWare et RISC OS; : pour toutes les autres plateforme; la valeur utilisée par PHP est disponible dans la contante PATH_SEPARATOR). Si un dossier vide est fourni dans PHP_INI_SCAN_DIR, PHP lira également le dossier fournis à la compilation via . Dans chaque répertoire, PHP lira tous les fichiers terminant par .ini dans l'ordre alphabétique. Une liste des fichiers qui ont été chargé et dans quel ordre est disponible en appelant la fonction php_ini_scanned_files, ou en exécutant PHP avec l'option . Fichiers .user.ini PHP inclut la prise en charge des fichiers INI de configuration par répertoire. Ces fichiers sont analysés uniquement par le SAPI CGI/FastCGI. Cette fonctionnalité rend obsolète l'extension PECL htscanner. Si vous exécutez PHP en tant que module Apache, l'utilisation des fichiers &htaccess; produit le même effet. En plus du fichier &php.ini; principal, PHP analyse les fichiers INI contenus dans chaque dossier, en commençant par le dossier depuis lequel le fichier PHP courant est appelé, et parcourt les dossiers jusqu'au dossier racine courant (tel que défini par la variable $_SERVER['DOCUMENT_ROOT']). Dans le cas où le fichier PHP est hors de la racine web, seul son dossier est scanné. Seules les configurations INI avec les modes PHP_INI_PERDIR et PHP_INI_USER seront reconnues dans les fichiers INI .user.ini-style. Deux nouvelles directives INI, user_ini.filename et user_ini.cache_ttl contrôlent l'utilisation des fichiers INI définis par l'utilisateur. user_ini.filename définit le nom du fichier cherché par PHP dans chaque dossier ; si cette directive est définie à une chaîne vide, PHP n'analysera rien du tout. Par défaut, vaut .user.ini. user_ini.cache_ttl contrôle la durée entre 2 re-lectures des fichiers INI définis par l'utilisateur. Par défaut, vaut 300 secondes (5 minutes). Où une directive de configuration peut être modifiée Ces modes déterminent quand et où une directive PHP peut ou ne peut pas être modifiée, et chaque directive du manuel est dirigée par un de ces modes. Par exemple, certaines directives peuvent être modifiées dans un script PHP avec la fonction ini_set, alors que d'autres ont besoin d'être modifiées dans les fichiers &php.ini; ou &httpd.conf;. Par exemple, la directive output_buffering a le mode PHP_INI_PERDIR alors elle ne peut pas être modifiée avec la fonction ini_set. D'un autre coté, la directive display_errors a le mode PHP_INI_ALL, et peut être modifiée n'importe où, y compris avec la fonction ini_set. Définition des modes PHP_INI_* Mode Signification PHP_INI_USER La directive peut être modifiée dans un script utilisateur, avec la fonction ini_set, ou via la base de registre Windows. L'entrée peut être définie dans &user-ini;. PHP_INI_PERDIR La directive peut être modifiée dans les fichiers &php.ini;, &htaccess;, &httpd.conf; ou &user-ini; PHP_INI_SYSTEM La directive peut être modifiée dans les fichiers &php.ini; ou &httpd.conf; PHP_INI_ALL La directive peut être modifiée n'importe où
Comment modifier la configuration Exécuter PHP comme module Apache Lorsque vous utilisez le module Apache, vous pouvez aussi changer les paramètres de configuration en utilisant les directives dans les fichiers de configuration d'Apache (&httpd.conf;) et dans les fichiers &htaccess;. Vous aurez besoin des privilèges "AllowOverride Options" ou "AllowOverride All". Il y a de nombreuses directives Apache qui vous permettent de modifier la configuration de PHP à partir des fichiers de configuration Apache. Pour une liste des directives qui sont PHP_INI_ALL, PHP_INI_PERDIR ou PHP_INI_SYSTEM reportez-vous à l'annexe Liste des directives du php.ini. php_value nom valeur Modifie la valeur de la directive spécifiée. Cette instruction n'est utilisable qu'avec les directives PHP de type PHP_INI_ALL et PHP_INI_PERDIR. Pour annuler une valeur qui aurait été modifiée au préalable, utilisez la valeur none. N'utilisez pas php_value pour configurer des valeurs booléennes. php_flag (voir plus bas) doit être utilisée. php_flag nom on|off Cette instruction est utilisée pour activer ou désactiver une option. Cette instruction n'est utilisable qu'avec les directives PHP de type PHP_INI_ALL et PHP_INI_PERDIR. php_admin_value nom valeur Cette instruction affecte une valeur à la variable spécifiée. Cette instruction NE peut PAS être utilisée dans un fichier &htaccess;. Toute directive de PHP configurée avec le type php_admin_value ne peut pas être modifiée en utilisant le fichier &htaccess; ou la fonction ini_set. Pour annuler une valeur qui aurait été modifiée au préalable, utilisez la valeur none. php_admin_flag name on|off Cette directive est utilisée pour activer ou désactiver une option. Cette instruction NE peut PAS être utilisée dans un fichier &htaccess;. Toute directive de PHP configurée avec le type php_admin_flag ne peut pas être modifiée en utilisant le fichier &htaccess; ou par la fonction ini_set. Exemple de configuration Apache php_value include_path ".:/usr/local/lib/php" php_admin_flag engine on php_value include_path ".:/usr/local/lib/php" php_admin_flag engine on ]]> Les constantes PHP n'existent pas en dehors de PHP. Par exemple, dans le fichier &httpd.conf;, vous ne pouvez pas utiliser des constantes PHP telles que E_ALL ou E_NOTICE pour spécifier le niveau de rapport d'erreur, car ces constantes n'ont pas de signification pour Apache, et seront remplacées par 0. Utilisez les valeurs numériques à la place. Les constantes peuvent être utilisées dans le &php.ini; Modifier la configuration de PHP via la base de registre Windows Lorsque vous utilisez PHP sur Windows, la configuration peut être modifiée dossier par dossier en utilisant la base de registres de Windows. Les valeurs de configuration sont stockées avec la clé de registre HKLM\SOFTWARE\PHP\Per Directory Values, dans les sous-clés correspondantes aux noms de dossier. Par exemple, la valeur d'une option dans le dossier c:\inetpub\wwwroot sera stockée dans la clé HKLM\SOFTWARE\PHP\Per Directory Values\c\inetpub\wwwroot. La valeur de cette option sera utilisée pour tous les scripts qui fonctionnent dans ce dossier ou ses sous-dossiers. Les valeurs sous la clé doivent avoir le nom d'une direction de configuration PHP, et la valeur correspondante. Les constantes PHP ne sont pas utilisables : il faut mettre la valeur entière. Cependant, seules les valeurs des configurations dans PHP_INI_USER peuvent être fixées de cette manière, celles dans PHP_INI_PERDIR ne peuvent l'être, car ces valeurs de configurations sont relues à chaque requête. Autres interfaces de configuration de PHP Suivant la façon dont vous exécutez PHP, vous pouvez changer certaines valeurs durant l'exécution de vos scripts en utilisant ini_set. Voir la documentation de la fonction ini_set pour plus d'informations. Si vous êtes intéressé par une liste complète des options configurées sur votre système avec leurs valeurs courantes, vous pouvez exécuter la fonction phpinfo et consulter la page résultante. Vous pouvez aussi accéder individuellement aux directives de configuration pendant l'exécution de vos scripts en utilisant soit la fonction ini_get, soit la fonction get_cfg_var.