PHP 5.3 : Configuration par répertoire basée sur des fichiers .ini – Pascal MARTIN (n+1).zéro

php.ini : Sections PATH et HOST

La seconde nouveauté au niveau de la configuration de PHP, toujours en mode CGI, est l’ajout du support des sections PATH et HOST, utilisables dans le fichier php.ini.
Section PATH

Il est possible, à partir de PHP 5.3, de définir dans le fichier php.ini système des valeurs de directives de configuration qui ne seront appliquées que pour certains répertoires, un peu à la manière de ce que nous faisons plus haut avec les fichiers .user.ini…

… La différence étant que, cette fois :

La configuration est centralisée au niveau d’un seul fichier,
Et puisque nous travaillons dans le fichier php.ini système, accessible seulement par l’administrateur du serveur, nous pouvons modifier des options de configuration qu’il ne nous était pas possible de modifier dans les fichiers .user.ini, pour raisons de sécurité.

Une section PATH se défini en prenant en paramètre le chemin (au sens « système de fichiers ») sur lequel les directives qu’elle défini doivent s’appliquer.

Par exemple, définissons deux sections PATH dans notre fichier php.ini, comme suit :

[PATH=/home/php/php53/ini/exemple-2/a]
variables_order = GPC
upload_max_filesize = « 5M »
upload_tmp_dir = « /home/php/temp/ »

[PATH=/home/php/php53/ini/exemple-2/b]
variables_order = GPC
upload_max_filesize = « 7M »

Pour les scripts PHP qui seront exécutés depuis le répertoire « a », nous pourrons par exemple uploader des fichiers allant jusqu’à 5 Mo :

ini-config-section-PATH-a-2.png

Et on constate que, cette fois-ci, la modification de valeur de la directive upload_tmp_dir a bien été prise en compte : dans le fichier php.ini système, nous avons le droit de la modifier, contrairement à ce que nous avions remarqué plus haut pour les fichiers .user.ini.

Dans le second répertoire, « b », la limitation de taille en upload est cette fois-ci configurée à 7 Mo :

ini-config-section-PATH-b-1.png

A chaque fois, j’ai pris des directives de configuration « géographiquement proches » dans la sortie de phpinfo, pour me faciliter les choses…
… Bien entendu, vous pouvez aussi essayer avec d’autres options ^^

Section HOST

Cela intéressera surtout ceux d’entre-vous qui hébergent plusieurs sites sur un seul serveur : depuis PHP 5.3, en mode CGI, il est possible de définir des directives de configuration en fonction de l’hôte — et donc du site — auquel l’utilisateur accède.

Par exemple, on peut ajouter au sein du fichier php.ini système une section telle que celle-ci :

[HOST=172.16.133.128:8080]
variables_order = GPC
upload_max_filesize = « 5M »
upload_tmp_dir = « /home/php/temp/ »

Une section HOST prend en paramètre le nom d’hôte pour lequel elle doit être considérée.
Vous noterez que ici, un numéro de port est inclu ; en effet, le numéro de port est considéré comme faisant parti du nom d’hôte, comme on peut le constater ci-dessous :

ini-cgi-_server-host.png

Accessoirement, si vous obtenez une section « PHP Variables » vide suite à l’appel de phpinfo, vérifiez que la directive variables_order prise en compte pour l’exécution de votre script inclut bien les variables serveur — la lettre S, donc.

Mais, au fait, avec ces nombreuses nouvelles possibilités de configuration, où va être définie la directive variables_order ?

Dans le fichier php.ini système ?
Eventuellement, re-définie, au sein d’une section PATH ou HOST ?
Ou est-ce qu’elle sera re-définie dans le .user.ini de votre répertoire ?
Ou même dans un fichier .user.ini situé dans l’un des répertoires père de celui où se trouve votre script ?

Vous l’aurez compris, ces nouvelles fonctionnalités ne sont pas sans présenter un risque : celui d’avoir du mal à vous y retrouver au sein de vos fichiers de configuration !
A vous donc de ne pas en abuser, et de les utiliser à bon escient %)

Pour ce qui est de la documentation officielle, vous pouvez vous référer à List of php.ini sections.