间歇性地在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路径为空,而Plesk在默认配置中为其他内容设置了admin_flag。 PHP的更新解决了该问题。
http://bugs.php.net/bug.php?id=43677