Maison > développement back-end > PHP7 > le corps du texte

Tutoriel d'utilisation de Yaconf pour PHP7

Guanhui
Libérer: 2023-02-17 14:44:01
avant
3448 Les gens l'ont consulté

Ce projet n'est en fait pas une idée nouvelle. Il s'agit d'un petit outil que j'ai créé dans mon premier projet d'optimisation après mon arrivée sur Weibo. Mais comme Weibo_Conf est une extension Weibo, il existe d'autres fonctions spécialement personnalisées. pour Weibo, ils ne conviennent donc pas à l'open source direct

Avec la sortie de PHP7, de nombreux nouveaux types de persistance ont été ajoutés, comme IS_IMMUTABLE_ARRAY, j'ai donc redéveloppé Yaconf sous PHP7, open source pour tout le monde. utiliser.

Introduction

Tout d'abord, parlons de ce que cela fait.

J'ai vu de nombreux projets, utilisant des fichiers PHP pour la configuration, il peut y avoir une douzaine, voire des dizaines de fichiers de configuration .php dans un répertoire de configuration, qui contiennent divers tableaux, et même certains fichiers de dictionnaire (tels que chinois/anglais (Contrôle) sont également placés dans la configuration. Cela provoque l'analyse du fichier de configuration pour consommer beaucoup de performances (certes, utiliser opcache peut être mieux, mais en fait il y a quand même un processus d'exécution

En plus de PHP, il y a aussi ceux qui utilisent json et yaml). est que la lisibilité de ces configurations est relativement mauvaise. De plus, elles nécessitent également une analyse d'exécution

Le répertoire de configuration est souvent accompagné du code. Premièrement, il y aura des risques de sécurité (il contient souvent des informations sensibles). la configuration). Deuxièmement, si la configuration et le code appartiennent au même projet, cela entraînera que la modification de la configuration passe par le processus de code en ligne.

Certains fichiers de configuration de ressources, tels que mysql/memcache Informations de configuration, ce contenu doit être transparent pour le développement, et l'exploitation et la maintenance doivent être directement responsables. Cependant, si elles sont insérées dans le code, si l'exploitation et la maintenance veulent initier des changements, le développement et la coopération doivent être modifiés pour modifier la configuration. fichier et allez en ligne.

Ainsi, Yaconf est un outil créé pour résoudre ces problèmes

Il utilise un répertoire de configuration séparé (spécifié dans yaconf.directory), et non avec le code.

Il gère toutes les configurations à traiter au démarrage de PHP, puis ces configurations résideront en mémoire et vivront et mourront avec le cycle de vie de PHP. Cela évite d'analyser le fichier de configuration à chaque fois qu'il est demandé. >

Tous les contenus de configuration sont tous immuables, ce qui peut réduire l'utilisation de la mémoire à l'aide de Fork's COW. Lors de l'accès à la configuration, il n'y a presque pas besoin de copie de mémoire, et il n'y aura pas d'augmentation ou de diminution inutile du contenu. nombre de références

La chose la plus importante est qu'une fois le répertoire de configuration et le code séparés, un arrière-plan de gestion de configuration peut être utilisé pour obtenir une gestion unifiée de la configuration.

Il prend en charge (pour les non- ZTS) rechargement des changements de configuration, c'est-à-dire configuration S'il y a des changements (il est recommandé d'utiliser mv au lieu de cp pour changer la configuration), il se rechargera sans redémarrer (la fréquence de détection est contrôlée par yaconf.check_delay

Il prend en charge une variété de types de configuration, notamment les chaînes, les tableaux, les sections, l'héritage de section, et vous pouvez également écrire des constantes PHP et des variables d'environnement directement dans la configuration

La chose la plus importante est, c'est très simple.

API

Yaconf ne propose que deux méthodes,

mixed Yaconf::get(string $name, mixed $default = NULL)
Copier après la connexion

C'est pour obtenir une configuration, le nom est le nom de la configuration, d'une manière générale, si vous avez un fichier ini appelé foo.ini , alors si $name utilise foo, il obtiendra tout le contenu de ce fichier et le renverra sous la forme d'un tableau par défaut est la valeur par défaut renvoyée lorsque. la configuration n'existe pas.

bool Yaconf::has(string $name)
Copier après la connexion

Ceci permet de détecter si une configuration existe.

Éléments de configuration Yaconf

yaconf.directory
Copier après la connexion
Répertoire du fichier de configuration. ne peut pas être spécifié via ini_set car il doit être déterminé au démarrage de PHP.

yaconf.check_delay
Copier après la connexion

À quelle fréquence (en secondes) détecter les modifications de fichier S'il est 0, il ne sera pas détecté. il est 0, les modifications de fichiers ne peuvent être rechargées qu'en redémarrant PHP

Format configuré

Yaconf utilise les fichiers ini comme fichiers de configuration. ini est le plus approprié pour les fichiers de configuration. Il est au format clé-valeur et est clair et lisible

Écriture de configuration simple Cela ressemble à ceci (tout ce qui suit suppose que le nom du fichier ini est test). :

foo="bar"
phpversion=PHP_VERSION
env=${HOME}
Copier après la connexion

Comme indiqué ci-dessus, nous utilisons des guillemets pour les configurations générales. Pour celles qui ne sont pas citées, nous allons essayer d'utiliser des constantes PHP Explication, c'est-à-dire que nous pouvons écrire des constantes PHP directement dans le fichier. configuration.

De plus, vous pouvez également voir que nous pouvons écrire des variables d'environnement directement dans la configuration, comme le ci-dessus env:

Yaconf::get("test.env"); //test是配置文件名字
//string(16) "/home/huixinchen"
Copier après la connexion

Comme indiqué ci-dessus, vous pouvez voir qu'en supposant que le la valeur de foo est accessible via le code suivant :

Yaconf::get("test.foo"); //test是配置文件名字
Copier après la connexion

Yaconf prend également en charge la configuration de type tableau, qui s'écrit comme suit :

arr.0=1
arr.1=2
Copier après la connexion

Si c'est le cas pour un tableau continu, vous pouvez également écrire directement :

arr[]=1
arr[]=2
Copier après la connexion

Ensuite pour la valeur du tableau, vous pouvez l'obtenir via le code suivant :

Yaconf::get("test.arr");
Copier après la connexion

Cela obtiendra le tableau arr dans le fichier de configuration de test Bien sûr. Vous pouvez également. obtenir directement une valeur spécifique dans le tableau. Par exemple, si vous souhaitez obtenir directement le 0ème élément du tableau arr dans le fichier de configuration de test :

$arr = Yaconf::get("test.arr.0");
Copier après la connexion

Yaconf prend également en charge la configuration du type map, qui s'écrit comme suit :

map.foo=bar
map.bar=foo
Copier après la connexion

; Vous pouvez utiliser des points-virgules pour écrire des commentaires

map2.foo.name=yaconf
map2.foo.year=2015
Copier après la connexion

La valeur du nom de la sous-carte foo de map2 est accessible sous la forme suivante :

Yaconf::get("test.map2.foo.name"); //test是配置文件名字
Copier après la connexion

De plus, le Le fichier de configuration peut également être divisé en section et héritage de section :

[parent]
parent="base"
children="NULL"
[children : parent]
children="children"
Copier après la connexion

Veuillez noter la syntaxe d'héritage de la section de configuration children : (deux-points) parent, ce qui signifie que la section enfants hérite de tous les éléments de configuration de base. Ensuite, vous la définissez. dans la section enfants La configuration du même nom que dans la section parent écrasera le contenu défini dans le parent

La valeur de la configuration enfants dans la section enfants est accessible sous la forme suivante : <🎜. >

Yaconf::get("test.children.children"); //test是配置文件名字
Copier après la connexion

样例

首先, 假设我们的所有的配置文件都放置在/tmp/yaconf中, 那么我们就需要在php.ini中增加如下配置:

yaconf.directory=/tmp/yaconf
Copier après la connexion

这样yaconf在PHP启动的时候, 就会在这个目录下找所有的*.ini文件, 然后尝试处理他们. 这里要注意的是不支持多级目录, 也就是说, yaconf只会处理yaconf.directory内的*.ini文件, 不会处理子目录里面的(这主要是为了简单考虑, 因为有分节, 你就可以一个项目定义一个ini文件).

假设/tmp/yaconf下有俩个ini文件, 分别是:

foo.ini

name="yaconf"
year=2015
features[]="fast"
features.1="light"
features.plus="zero-copy"
features.constant=PHP_VERSION
bar.ini
Copier après la connexion

[base]

parent="yaconf"
children="NULL"
[children:base]
children="set"
Copier après la connexion

然后对于foo的内容:

php7 -r &#39;var_dump(Yaconf::get("foo"));&#39;
/*
array(3) {
  ["name"]=>
  string(6) "yaconf"
  ["year"]=>
  string(4) "2015"
  ["features"]=>
  array(4) {
    [0]=>
    string(4) "fast"
    [1]=>
    string(5) "light"
    ["plus"]=>
    string(9) "zero-copy"
    ["constant"]=>
    string(9) "7.0.0-dev"
  }
}
*/
Copier après la connexion

对于bar的内容:

php7 -r &#39;var_dump(Yaconf::get("bar"));&#39;
/*
array(2) {
  ["base"]=>
  array(2) {
    ["parent"]=>
    string(6) "yaconf"
    ["children"]=>
    string(4) "NULL"
  }
  ["children"]=>
  array(2) {
    ["parent"]=>
    string(6) "yaconf"
    ["children"]=>
    string(3) "set"
  }
}
*/
Copier après la connexion

当然你可以用 (.)链接语法精确访问任何一个特定的值.

最后

我的Ya系列扩展从此又多了一个新成员, 算上之前的Yaf(PHP框架), Yar(PHP RPC框架), Yac(PHP单机缓存), 大家就可以很容易搭建一套高性能的LAMP应用解决方案出来.

注: Yaconf要求PHP7才能用 

推荐教程:《PHP7

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
php
source:laruence.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!