Eaccelerator’s open_basedir error

February 8, 2010 1 Comment 分类: Linux

前两天有点空,不知道头脑里哪根筋出问题了,居然想到把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去当小白鼠!

相关文章
一条评论
See sth. ? Say sth. !
  1. yum -y update
    爽歪歪

    [回复]

    c.d.. February 8, 2010

发表评论

Commenter Gravatar