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 :
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
XAMPP
Lancez votre installation de XAMPP, cliquez avec le bouton droit sur le bouton "Config".
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.
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
Nom | Défaut | Modifiable | Historique |
---|---|---|---|
short_open_tag | 1 | PHP_INI_ALL | - |
asp_tags | 0 | PHP_INI_PERDIR | Disponible jusqu'en PHP 7.0.0 |
precision | 14 | PHP_INI_ALL | - |
serialize_precision | -1 | PHP_INI_ALL | Anté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_compliance | 1 | PHP_INI_ALL | Disponible jusqu'en PHP 5.4.0 |
allow_call_time_pass_reference | 1 | PHP_INI_PERDIR | Disponible jusqu'en PHP 5.4.0 |
disable_functions | - | PHP_INI_SYSTEM uniquement | - |
disable_classes | - | php.ini uniquement | - |
exit_on_timeout | - | PHP_INI_ALL | Disponible à partir de PHP 5.3.0 |
expose_php | 1 | php.ini uniquement | - |
hard_timeout | 2 | PHP_INI_SYSTEM | Disponible à partir de PHP 7.1.0 |
zend.multibyte | 0 | PHP_INI_ALL | Disponible à partir de PHP 5.4.0 |
zend.script_encoding | NULL | PHP_INI_ALL | Disponible à partir de PHP 5.4.0 |
zend.detect-unicode | NULL | PHP_INI_ALL | Disponible à partir de PHP 5.4.0 |
zend.signal_check | 0 | PHP_INI_SYSTEM | Disponible à partir de PHP 5.4.0 |
zend.assertions | 1 | PHP_INI_ALL avec des restrictions | Disponible à partir de PHP 7.0.0 |
zend.ze1_compatibility_mode | 0 | PHP_INI_ALL | Disponible jusqu'en PHP 5.3.0 |
detect_unicode | 1 | PHP_INI_ALL | Disponible à partir de PHP 5.1.0. Renommé en zend.detect-unicode depuis PHP 5.4.0. |
Limite des ressources
Nom | Défaut | Modifiable | Historique |
---|---|---|---|
memory_limit | 128M | PHP_INI_ALL | "8M" avant PHP 5.2.0, "16M" depuis PHP 5.2.0 |
Réglage de Performance
Nom | Défaut | Modifiable | Historique |
---|---|---|---|
realpath_cache_size | 4M | PHP_INI_SYSTEM | Disponible à 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_ttl | 120 | PHP_INI_SYSTEM | Disponible à partir de PHP 5.1.0 |
Gestion des données
Nom | Défaut | Modifiable | Historique |
---|---|---|---|
arg_separator.output | & | PHP_INI_ALL | - |
arg_separator.input | & | PHP_INI_PERDIR | - |
variables_order | EGPCS | PHP_INI_PERDIR | PHP_INI_ALL pour PHP <= 5.0.5 |
request_order | - | PHP_INI_SYSTEM|PHP_INI_PERDIR | Disponible à partir de PHP 5.3.0 |
auto_globals_jit | 1 | PHP_INI_PERDIR | Disponible à partir de PHP 5.0.0 |
register_globals | 0 | PHP_INI_PERDIR | Disponible jusqu'en PHP 5.4.0 |
register_argc_argv | 1 | PHP_INI_PERDIR | - |
register_long_arrays | 1 | PHP_INI_PERDIR | Obsolète en PHP 5.3.0. Retiré depuis PHP 5.4.0 |
enable_post_data_reading | 1 | PHP_INI_PERDIR | Disponible à partir de PHP 5.4.0 |
post_max_size | 8M | PHP_INI_PERDIR | - |
auto_prepend_file | NULL | PHP_INI_PERDIR | - |
auto_append_file | NULL | PHP_INI_PERDIR | - |
default_mimetype | text/html | PHP_INI_ALL | - |
default_charset | UTF-8 | PHP_INI_ALL | Par défaut "UTF-8" depuis PHP 5.6.0, vide pour PHP < 5.6.0 |
always_populate_raw_post_data | 0 | PHP_INI_PERDIR | Disponible jusqu'en PHP 7.0.0 |
Chemins et répertoires
Nom | Défaut | Modifiable | Historique |
---|---|---|---|
include_path | .;/chemin/vers/php/pear | PHP_INI_ALL | - |
open_basedir | NULL | PHP_INI_ALL | PHP_INI_SYSTEM en PHP < 5.3.0 |
doc_root | NULL | PHP_INI_SYSTEM | - |
user_dir | NULL | PHP_INI_SYSTEM | - |
user_ini.cache_ttl | 300 | PHP_INI_SYSTEM | Disponible à partir de PHP 5.3.0 |
user_ini.filename | .user.ini | PHP_INI_SYSTEM | Disponible à partir de PHP 5.3.0 |
extension_dir | /chemin/vers/php | PHP_INI_SYSTEM | - |
extension | NULL | php.ini uniquement | - |
zend_extension | NULL | php.ini uniquement | - |
zend_extension_debug | NULL | php.ini uniquement | Disponible avant PHP 5.3.0 |
zend_extension_debug_ts | NULL | php.ini uniquement | Disponible avant PHP 5.3.0 |
zend_extension_ts | NULL | PHP_INI_SYSTEM | Disponible avant PHP 5.3.0 |
cgi.check_shebang_line | 1 | PHP_INI_SYSTEM | Disponible à partir de PHP 5.2.0 |
cgi.discard_path | 0 | PHP_INI_SYSTEM | Disponible à partir de PHP 5.3.0 |
cgi.fix_pathinfo | 1 | PHP_INI_SYSTEM | PHP_INI_ALL dans les versions inférieures à PHP 5.2.1 |
cgi.force_redirect | 1 | PHP_INI_SYSTEM | PHP_INI_ALL dans les versions inférieures à PHP 5.2.1 |
cgi.nph | 0 | PHP_INI_SYSTEM | Disponible à partir de PHP 5.3.0 |
cgi.redirect_status_env | NULL | texte | PHP_INI_ALL dans les versions inférieures à PHP 5.2.1 |
cgi.rfc2616_headers | 0 | PHP_INI_ALL | - |
fastcgi.impersonate | 0 | PHP_INI_SYSTEM | PHP_INI_ALL dans les versions inférieures à PHP 5.2.1 |
fastcgi.logging | 1 | PHP_INI_SYSTEM | PHP_INI_ALL dans les versions inférieures à PHP 5.2.1 |
Chargement de fichiers
Nom | Défaut | Modifiable | Historique |
---|---|---|---|
file_uploads | 1 | PHP_INI_SYSTEM | - |
upload_tmp_dir | NULL | PHP_INI_SYSTEM | - |
max_input_nesting_level | 64 | PHP_INI_PERDIR | Disponible à partir de PHP 5.3.9 |
max_input_vars | 1000 | PHP_INI_PERDIR | Disponible à partir de PHP 5.3.9 |
upload_max_filesize | 2M | PHP_INI_PERDIR | - |
max_file_uploads | 20 | PHP_INI_SYSTEM | Disponible à partir de PHP 5.2.12 |
Historique
Version | Description |
---|---|
7.0.0 | Les marqueurs croisillons (#) ne sont plus reconnus comme des commentaires. |
5.3.0 | Les marqueurs croisillons (#) ne doivent plus être utilisés comme commentaires et vont lever un avertissement pour dépréciation si utilisé. |
5.2.0 | La variable d'environnement PHP_INI_SCAN_DIR peut être définie pour remplacer la valeur définie par le script de configuration. |
5.1.0 | Il 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.