0
我們在一個託管服務器上遇到了一個非常奇怪的問題。include_path間歇性地更改值:可能是什麼原因?
問題:好像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';
我目前最好的猜測是某種競爭條件被觸發。
正在發生什麼的精確描述:
- 電話通過set_include_path()
- 電話get_include_path()
預期結果: 2應符合1
實際的間歇結果: 2是空的,或者含有(文檔塊)
- PHP源代碼中的一個
- 有效路徑,似乎已其他include_paths由其它用戶設置
- 空字符串
- 字符串 '內容類型:text/html的'
我們已經嘗試了以下內容:
- 重新編譯Apache和PHP與最新的PHP版本
- 重新編譯Apache和PHP與APC關閉
- 清除APC緩存
- 重啓Apache
- 重新啓動整個服務器
一些技術細節:
- OS:CentOS的5.9
- Web服務器:Apache的2.2.23
- PHP:5.3。22個
截圖顯示我的include_path變量的奇怪內容:突然我現在
PHP註釋現在包括路徑
HTTP頭中包含路徑
01在包含路徑
亂碼內容
在包括路徑
我出的選項和思路更加亂碼內容。任何幫助將不勝感激。
冒着明顯的風險,這看起來像一個PHP的錯誤。 – zneak 2013-02-26 16:20:38
您可以嘗試在try catch中打包調用並打印出堆棧跟蹤。可能有助於縮小原因。 – BenOfTheNorth 2013-02-26 16:28:23