include_path间歇性地改变值:可能是什么原因?

时间:2013-02-26 16:18:22

标签: php apache cpanel race-condition

我们在其中一个托管服务器上遇到了一个非常奇怪的问题。

问题:似乎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';

我目前最好的猜测是,某种竞争条件正在被触发。

对所发生情况的准确描述:

  1. 调用set_include_path()
  2. 调用get_include_path()
  3. 预期结果: 2应匹配1

    实际,间歇性结果: 2为空或包含以下内容之一(随机)

    1. PHP源代码(docblocks)
    2. 看似随机的字符串,无论长短还是
    3. 似乎已由其他用户设置的其他include_path的有效路径
    4. 空字符串
    5. 字符串'Content-type:text / html'
    6. 我们尝试了以下内容:

      1. 使用最新的PHP版本重新编译Apache和PHP
      2. 在APC关闭的情况下重新编译Apache和PHP
      3. 清除APC缓存
      4. 重启Apache
      5. 重新启动整个服务器
      6. 一些技术细节:

        • 操作系统:CentOS 5.9
        • 网络服务器:Apache 2.2.23
        • PHP:5.3.22

        屏幕截图显示了我的include_path变量的奇怪内容:

        PHP comments now suddenly in my include path PHP注释现在突然出现在我的包含路径


        HTTP headers now in include path HTTP标头现在包含路径


        Garbled content in the include path 包含路径中的乱码内容


        More garbled content in the include path 包含路径中的更多乱码内容


        我没有选择和想法。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

此问题现在似乎已经解决。由于此特定服务器是运行WHM / Cpanel的专用服务器,因此我已将此问题上报给Cpanel支持。

经过一些研究,问题被缩小到homeloader.so模块,这使得每用户PEAR库成为可能。禁用此模块后,症状消失。

此问题的根本原因仍在调查中,但如果其他人遇到类似问题,可能需要注意这一点。