Eaccelerator’s open_basedir error
前两天有点空,不知道头脑里哪根筋出问题了,居然想到把VPS上的软件更新一下,结果直接导致这个VPS上所有动态PHP站点无法访问长达三个小时…
Mysql的升级很正常,没有什么好说的;PHP 5.2.11到PHP 5.3.1的升级也很正常;问题主要出在eaccelerator上面,从0.9.6-rc1升级到rc2,编译安装一切都很正常,无错。重启apache后所有动态站点都给我闹http 500错误,错误日志显示:
PHP Warning: Unknown: open_basedir restriction in effect. File() is not within the allowed path(s): (/home/xxxx/:/tmp:/var/tmp:/usr/local/lib/php/) in Unknown on line 0
PHP Fatal error: Can’t load /home/xxxx/domains/www.onepx.com/public_html/index.php, open_basedir restriction. in Unknown on line 0
默认情况下,php.ini中的“open_basedir = ”是被冒号注解掉的,我去掉冒号,把错误中提到的那些目录加入:
open_basedir = /home/xxxx/:/tmp:/var/tmp:/usr/local/lib/php/
没有一点帮助,问题依旧。无赖,只好暂时不要eaccelerator,在php.ini中修改:
eaccelerator.enable=”0″
没有加速的网站觉得是有那么一点点慢,不甘心,又把eaccelerator-0.9.6-rc1这个老版本下载下来编译安装。嘿!在PHP 5.3.1下居然能用,那就继续用老版本吧。
次日,当我继续研究这个问题的时候,在eaccelerator主页上发现,就在2月4日他们居然放出了稳定版0.9.6,真是及时雨啊,啥也不想了,下载,编译!结果http 500:
PHP Warning: Unknown: open_basedir restriction in effect…
PHP Fatal error: … open_basedir restriction. in Unknown on line 0
PHP crash了,TMD又玩我,升级升的反倒不如从前了。继续研究…
终于功夫不负有心人,找到了一个bug report,而且还有人给出了patch。如果有人遇到和我相同的情况,下载eaccelerator 0.9.6后先不要安装,解包后找到eaccelerator.c这个文件,打开第1156行,这样的:
if (PG(open_basedir) && php_check_open_basedir(realname TSRMLS_CC)) {
修改成:
if (PG(open_basedir) && php_check_open_basedir(file_handle->filename TSRMLS_CC)) {
然后再编译安装吧。
如果说这次的升级给我啥教训的话,用老外的一句话很贴切:” If It’s Not Broken, Don’t Fix It !”翻译成中文:没事干也别TMD去当小白鼠!

yum -y update
爽歪歪
[回复]