最近在Win7的Apache+PHP+Mysql环境下安装并启用了PHP_APC模块(ver3.1.9 stable),想提升一下开发环境的运行效率。
按照常见配置安装APC并重启Apache之后在Yii框架下运行正常,但在使用phpmyadmin时却出现了莫名其妙的Permission denied错误:
| Warning: require_once(x:\path\to\phpmyadmin): failed to open stream: Permission denied in x:\path\to\phpmyadmin\index.php on line 13 Fatal error: require_once(): Failed opening required '' (include_path='.;C:\php\pear') in x:\path\to\phpmyadmin\index.php on line 13 | 
几经调试和查找资料之后,才确认问题所在:APC对include/require之类的函数支持是有问题的,确切的说是:include,require,include_once,require_once等函数的参数必须提供绝对路径,而不能是相对路径,否则就会出现各种Permission denied错误。
因为phpmyadmin里大量使用了相对路径,所以在PHP+APC环境里就无法正常运行;而Yii框架则完全依靠调用dirname()函数生成绝对路径,所以后者对APC表现出很好的兼容性。这一点需要PHP开发人员多多注意。
关于这个兼容性问题的解决方法有以下2种:
1、调用include/require类函数时,应传递绝对路径,如:
- require_once(dirname(__FILE__).'/path/to/common.inc.php');
2、在Apache的conf/httd.conf文件(如是虚拟主机配置则在conf/extra/httpd-vhosts.conf文件)中,对phpmyadmin所在的目录配置内加入如下代码:
- <Directory "x:/path/to/phpmyadmin">
- # ...
- # 对phpmyadmin关闭apc模块
- php_admin_flag apc.enabled 0
- </Directory>
 
 
                     
            
        













 
                    

 
                 
                    