当前位置: 首页 > 后端技术 > PHP

PHP的apc扩展导致引入文件错误

时间:2023-03-30 03:15:33 PHP

最近遇到一个很奇葩的bug。宿主机PHP代码版本回滚过程中,备机服务不可用。经过各种复现和文档查询,发现PHP的apc扩展与rsync同时使用时,无法正确处理缓存文件,最终影响服务。官方也提供了解决方案,加上一行配置:#php.ini[apc]apc.stat_ctime=1来解释一下这个问题的机理。重点:使用了PHP+apc扩展+rsync主从同步机制。故障表现:启动平台服务时找不到文件。更新平台服务后,访问平台服务报错:Warning:include(Yii.php):failedtoopenstream:Nosuchfileordirectoryin/home/disk4/htdocs/oss_debug/protected/lib/Yii/framework/YiiBase.phponline421Warning:include():Failedopening'Yii.php'forinclusion(include_path='.:/home/work/lnmp/weblib/phplib:/home/work/lnmp/lib/php')in/home/disk4/htdocs/oss_debug/protected/lib/Yii/framework/YiiBase.phponline421Fatalerror:Class'Yii'notfoundin/home/disk4/htdocs/oss_debug/index.php42行这里的提示信息说明问题出在YiiBase.php文件,421行引入Yii.php时找不到该文件。这里的include是相对路径,当前导入路径为.:/home/work/lnmp/weblib/phplib:/home/work/lnmp/lib/php,多个导入路径用:隔开,所以这里会在./,/home/work/lnmp/weblib/phplib,/home/work/lnmp/lib/php三个目录找到文件,分别搜索,发现文件不存在。但在正常服务下,将找不到该文件。具体为什么要搜索这个文件,我猜是先判断Yii类是否存在,如果不存在再导入Yii.php,而Yii类是在yii.php文件中定义的,所以我猜的是由于没有正确导入yii.php造成的。#yii.php