PHP 8.6.0 Beta 3 is available for testing

Yaconf

Introduction

Yet Another Configurations Container (Yaconf) est un conteneur de configuration. Il analyse les fichiers INI au démarrage de PHP et conserve le résultat en mémoire persistante pour toute la durée du cycle de vie de PHP, de sorte que chaque accès est une simple recherche dans une table de hachage, sans aucune E/S disque ni analyse par requête.

Yaconf enregistre toutes les configurations sous forme de chaînes internées ou de tableaux immuables. Ils ne sont pas comptabilisés dans les références, donc la récupération d'une configuration depuis Yaconf est effectivement sans copie. Depuis Yaconf 1.2.0, l'arbre de configuration analysé est en outre compacté dans un bloc contigu unique, ce qui réduit l'empreinte mémoire et améliore la localité du cache.

La configuration analysée réside en mémoire persistante partagée par tous les workers PHP-FPM via la copie sur écriture : tant qu'un fichier de configuration ne change pas, les workers partagent les mêmes pages mémoire physiques, quel que soit leur nombre.

Yaconf supporte les sections et l'héritage de sections dans les fichiers INI. Sur les compilations non-ZTS, il recharge aussi les fichiers automatiquement lorsqu'ils changent ; sur les compilations ZTS (thread-safe), les configurations sont chargées au démarrage et un redémarrage est nécessaire pour prendre en compte les modifications.

Depuis Yaconf 1.2.0, les sous-répertoires du répertoire configuré sont chargés récursivement (jusqu'à 16 niveaux de profondeur) et adressés avec le nom du répertoire comme niveau de clé : par exemple, Yaconf::get("users.database.master") lit la clé master depuis le fichier database.ini placé dans le sous-répertoire users/.

Stocker des configurations sensibles en dehors de l'arborescence web réduit aussi la surface d'attaque. Avec Yaconf, les fichiers .ini peuvent être placés dans un répertoire accessible uniquement par root, comme /etc/yaconf : le master PHP-FPM charge les configurations au démarrage du service, tandis que les workers forqués — qui s'exécutent sous un utilisateur non privilégié et traitent les requêtes web — n'ont pas besoin, et ne reçoivent pas, l'accès à ce répertoire.

Yaconf nécessite PHP 7.0 ou supérieur.

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top