间歇性地在PHP中设置包含路径失败

时间:2020-03-05 18:47:04  来源:igfitidea点击:

我已经尝试了两种:

ini_set('include_path', '.:/usr/share/php5:/usr/share/php5/PEAR:lib:app/classes');

并且 :

php_value include_path ".:/usr/share/php5:/usr/share/php5/PEAR:lib:app/classes"

在.htaccess文件中。

两种方法实际上都有效,但只是间歇性地起作用。也就是说,它们对于大约37个页面的请求将正常工作,然后在大约42个页面的请求中失败,从而导致require()调用导致致命错误,从而导致站点崩溃。

我什至不知道从哪里开始尝试找出正在发生的事情!

@cnote

Looks like you duplicated the current directory in your include path. Try removing one of the '.:' from your string.

in脚本版本最初是

ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . 'lib' . PATH_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'classes');

因此。:。:来自现有路径:

ini_get('include_path')

我仍然尝试删除它,问题仍然存在。

解决方案

回答

看起来我们在包含路径中复制了当前目录。尝试从字符串中删除"。:"之一。

回答

我们是否尝试过set_include_path()?这样做的好处是在失败时返回false,从而使我们至少可以捕捉到这种情况并生成一些有意义的调试数据。
另外,我们应该使用常量" PATH_SEPARATOR",因为Windows / * nix之间的常量有所不同。

作为一个具体的例子:

set_include_path('.' . PATH_SEPARATOR . './app/lib' . PATH_SEPARATOR . get_include_path());

(最后的get_include_path()意味着将ini / htaccess路径设置为任何值都将保留)

回答

原来,该问题与5.2.5中的PHP错误有关

为include_path设置" admin_flag"会导致某些请求中的include路径为空,而P​​lesk在默认配置中为其他内容设置了admin_flag。 PHP的更新解决了该问题。

http://bugs.php.net/bug.php?id=43677