重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
读了一遍yaconf的源码,发现大部分可以理解。在这个项目上结合现实中使用的两个场景进行进行一些小改动是个比较有趣的事情。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:主机域名、虚拟空间、营销软件、网站建设、红河哈尼网站维护、网站推广。代码地址:https://github.com/netbird/yaconf
业务场景一
在自己的测试环境,各个业务方要求某个业务的api必须长期指向他们的测试环境供他们测试。之前做法有修改host(碰到非80端口失灵),修改代码,修改配置文件。而这套环境又有新的开发任务,需要随时更新代码和配置文件,不更新会导致其他业务失败,所以不能加锁。经常造成代码和配置覆盖。不得不重新修改配置文件和代码满足之前的测试环境。。。
因代码配置文件基于yaconf的。所以修改了下yaconf的源码,提供了一种小方案。
在不修改配置文件和主项目代码的情况下。
增加测试模式和测试配置文件目录。
在yaconf设置成测试模式下,在directory_test添加自己需要满足测试需要的配置文件(可以是局部内容)。
在读取配置的时候 就优先读取测试内容,然后在读取通用配置。
例如:
配置文件:
a.ini的内容
a="b"
b="c"
此时读取Yaconf::get(‘a.a’) 得到的是b。
设置测试模式,里面测试配置:
a.ini
a="d"
此时读取Yaconf::get('a.a') 得到的是d。
当然,整体读取Yaconf::get('a'),会导致读取不到a.b的内容,具体依据自己使用的场景。
PS:仅在测试环境下当作练习使用,不适用所有场景。
业务场景二
如何在CLI模式下使用Yaconf
虽然Yaconf更适合web请求场景,不太适合在CLI模式下使用,但是受限与环境, 历史(业务难分离)等问题,又急切想使用Yaconf怎么办?
Yaconf的原理是在PHP_MINIT_FUNCTION函数里面初始化配置,然后在PHP_RINIT_FUNCTION函数里面根据条件更新配置。这样当一个web请求时,会触发PHP_RINIT_FUNCTION这个函数,从而自动根据条件更新配置。
而CLI模式模式下,如果进程不退出,那么只在启动的时候执行一次PHP_MINIT_FUNCTION和PHP_RINIT_FUNCTION,此时无法更新配置信息。
解决方案:
增加外部触发函数,手动执行更新。即:增加Yaconf::update()方法,在代码中,适合的位置去执行这个函数,触发更新。
当然,更新的原则和原理还是跟PHP_RINIT_FUNCTION一样。
如配置文件:
a.ini
a="b"
代码:
while(true) {
Yaconf::update();
var_dump(Yaconf::get('a.a'));
}
此时,如果将配置文件改成:
a="c"
则上述程序会在check_delay(通常5分钟)后,输出c(不用退出进程,即可更新).
目前,还没有投入正式环境。如果大家有这个使用场景,可以考虑以上方式。
ps: 1. 限于本人能力,仅仅包了个接口,没有对内部进行合并逻辑处理,重在解决问题。
2. 条条大道通罗马,如果可能,大家也可以使用别的更好的方式。解决问题的方法不唯一。
因能力有限,内部解析代码没有做改动。
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。