• PHP7 学习笔记(十六)Yaconf 一个高性能的配置管理扩展


    鸟哥博客原文:Yaconf – 一个高性能的配置管理扩展

    什么是yaconf ?

    它使用单独的一个配置目录(在yaconf.directory指定), 不和代码在一起.它在PHP启动的时候, 处理所有的要处理的配置, 然后这些配置就会常驻内存, 随着PHP的生命周期存亡. 避免了每次请求的时候解析配置文件.配置目录和代码分离以后, 可以借助一个配置管理后台, 来实现配置的统一化管理.配置如果有变化, 它会reload, 不需要重启(检测的频率由yaconf.check_delay控制).它支持丰富的配置类型, 包括字符串, 数组, 分节, 分节继承, 并且还可以在配置中直接写PHP的常量和环境变量等.

    为什么要用 yaconf ?

    一般我们项目中是用PHP文件做配置的, 一个config目录下可能有十几个甚至数十个.php配置文件, 里面都是各种各样的array, 这就导致配置文件的解析耗费了很大的性能。

    安装

    1、Windows

    Windows 10 环境配置

    phpStudy 集成环境

    扩展下载地址:http://pecl.php.net/package/yaconf

    选择一个最新版本:http://pecl.php.net/package/yaconf/1.0.7/windows

    根据本地环境学则一个版本

    复制 解压后的 php_yaconf.dll 文件到 D:phpStudyPHPTutorialphpphp-7.0.12-ntsext 目录

    修改php.ini 配置文件,添加以下扩展

    extension=php_yaconf.dll  

    配置yaconf

    [yaconf]
    yaconf.directory="D:phpStudyYaconf" // 配置文件的目录位置
    yaconf.check_delay=60 //  配置文件的更新时间  

    重启所有服务,使用php探针,查看配置是否安装成功

    以上表示安装成功了

    2、Linux 

    git clone https://github.com/laruence/yaconf.git
    
    cd yaconf/
    phpize 
    ./configure --with-php-config=/usr/local/php-7.2/bin/php-config
    
    sudo vim /usr/local/php-7.2/etc/php.ini ## 添加
    extension=yaconf.so
    sudo systemctl restart php-fpm.service

    一、单独使用

    在目录 D:phpStudyYaconf 下新增配置文件 redis.ini,内容如下

    [base]
    parent="yaconf"
    children="NULL"
     
    [children:base]
    children="set"  

     重启服务器,新建 index.php 文件测试

    <?php
    $redis = Yaconf::get('redis');
    print_r($redis);  

     打印内容

    $ php index.php
    Hello WorldArray
    (
        [base] => Array
            (
                [parent] => yaconf
                [children] => NULL
            )
    
        [children] => Array
            (
                [parent] => yaconf
                [children] => set
            )
    
    )

    二、框架集成使用(ThinkPHP5.1)

    php.ini 

    [yaconf]
    yaconf.directory="/home/www/web/cl_new_pay_dev"
    yaconf.check_delay=60 
    

    5.1 版本默认支付yaconf

    在项目更目录新建 thinkphp.ini 添加以下内容( cl_new_pay_dev 目录下)

    name="yaconf"
    year=2015
    features[]="fast"
    features.1="light"
    features.plus="zero-copy"
    features.constant=PHP_VERSION
    features.env=${HOME}
    

    由于默认Yaconf使用多个配置文件,建议在项目中使用setYaconf方法指定Yaconf使用的独立配置文件,例如

    // 建议在应用的公共函数文件中进行设置 common.php
    thinkfacadeConfig::setYaconf('thinkphp');
    

     (1)使用助手函数

    var_dump(Config::yaconf('name'));
    var_dump(Config::yaconf('year'));
    var_dump(Config::yaconf('features')['plus']);
    var_dump(Config::yaconf('features.plus'));
    var_dump(Config::yaconf('features.constant'));
    var_dump(Config::yaconf('features.env'));
    

     打印结果

    string(6) "yaconf"
    string(4) "2015"
    string(9) "zero-copy"
    string(9) "zero-copy"
    string(6) "7.2.12"
    string(0) ""
    

    (2)不适用助手函数,直接访问

    print_r("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    print_r(Yaconf::get("cpay"));
    print_r(Yaconf::get("cpay.common"));
    print_r(Yaconf::get("cpay.database"));
    print_r(Yaconf::get("cpay.redis"));
    print_r(Yaconf::get("cpay.redis.host"));
    

     打印结果

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Array
    (
        [common] => Array
            (
                [app_name] => 二万OCR
                [app_host] => www.cnblogs.com
                [app_debug] => 1
            )
    
        [database] => Array
            (
                [app_name] => 二万OCR
                [app_host] => www.cnblogs.com
                [app_debug] => 1
                [hostname] => 127.0.0.1
                [database] => cl_cpay
                [username] => root
                [password] => wang123456,
            )
    
        [redis] => Array
            (
                [app_name] => 点点支付
                [app_host] => www.cnblogs.com
                [app_debug] => 1
                [host] => 192.168.1.1
                [port] => 6379
                [auth] => 123456
                [prefix] => TII
            )
    
    )
    Array
    (
        [app_name] => 二万OCR
        [app_host] => www.cnblogs.com
        [app_debug] => 1
    )
    Array
    (
        [app_name] => 二万OCR
        [app_host] => www.cnblogs.com
        [app_debug] => 1
        [hostname] => 127.0.0.1
        [database] => cl_cpay
        [username] => root
        [password] => wang123456,
    )
    Array
    (
        [app_name] => 二万OCR
        [app_host] => www.cnblogs.com
        [app_debug] => 1
        [host] => 192.168.1.1
        [port] => 6379
        [auth] => 123456
        [prefix] => TII
    )
    192.168.1.1
    

     capy.ini 配置文件

    [common]
    app_name = "二万OCR"
    app_host = "www.cnblogs.com"
    app_debug= true
    
    [database:common]
    hostname = "127.0.0.1"
    database = "cl_cpay"
    username = "root"
    password = "wang123456",
    
    [redis:common]
    host = "192.168.1.1"
    port = 6379
    auth = 123456
    prefix = "TII"
  • 相关阅读:
    资料描述Android依赖注入:Google Guice on Android
    样本图片关于训练样本的真值标定
    文件配置GlassFish下手动部署JSF程序
    C语言关于链表的各项操作总结单向链表
    模式实现设计模式Java实现(四)
    节点交换《算法导论》学习笔记 第6章 二叉堆
    算法堆排序堆排序
    项目组织高级项目管理师个人总结基础知识
    字体代码Unity3D中汉字显示不完整的解决方案
    网站关键词[置顶] 如何做才能做到避免网站优化过度
  • 原文地址:https://www.cnblogs.com/tinywan/p/9528200.html
Copyright © 2020-2023  润新知