我们在其中一个托管服务器上遇到了一个非常奇怪的问题。
问题:似乎PHP的include_path被当前无法确定的进程半随机改变。这很奇怪,因为我们禁用了操作码缓存,多次重启服务器并使用mod_ruid2隔离了彼此的用户帐户。
重现此问题的脚本(除此之外没有任何内容):
// Removing this call from the file makes the errors go away
// This is just a part of our default include path, but is explicitly
// defined here to be able to reproduce the problem
set_include_path('.:/usr/local/share/php');
// Obviously, include_path should now be exactly the value as set above
echo 'Include path is: ';
var_dump(get_include_path());
echo '<br />';
// Debugging line: what is the cwd?
echo 'CWD IS: ';
var_dump(getcwd()) . '<br />';
// Test local file inclusion; this works
require_once 'bar.php';
// Test global file inclusion from include_path (location: /usr/local/share/php/)
// this intermittently fails
require_once 'Zend/Loader/Autoloader.php';
我目前最好的猜测是,某种竞争条件正在被触发。
对所发生情况的准确描述:
预期结果: 2应匹配1
实际,间歇性结果: 2为空或包含以下内容之一(随机)
我们尝试了以下内容:
一些技术细节:
屏幕截图显示了我的include_path变量的奇怪内容:
PHP注释现在突然出现在我的包含路径
中HTTP标头现在包含路径
包含路径中的乱码内容
包含路径中的更多乱码内容
我没有选择和想法。任何帮助将不胜感激。
答案 0 :(得分:1)
此问题现在似乎已经解决。由于此特定服务器是运行WHM / Cpanel的专用服务器,因此我已将此问题上报给Cpanel支持。
经过一些研究,问题被缩小到homeloader.so
模块,这使得每用户PEAR库成为可能。禁用此模块后,症状消失。
此问题的根本原因仍在调查中,但如果其他人遇到类似问题,可能需要注意这一点。