2013-02-26 51 views
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'; 

我目前最好的猜測是某種競爭條件被觸發。

正在發生什麼的精確描述:

  1. 電話通過set_include_path()
  2. 電話get_include_path()

預期結果: 2應符合1

實際的間歇結果: 2是空的,或者含有(文檔塊)

  • 看似隨機串,長期和短期以下的(隨機)

    1. PHP源代碼中的一個
    2. 有效路徑,似乎已其他include_paths由其它用戶設置
    3. 空字符串
    4. 字符串 '內容類型:text/html的'

    我們已經嘗試了以下內容:

    1. 重新編譯Apache和PHP與最新的PHP版本
    2. 重新編譯Apache和PHP與APC關閉
    3. 清除APC緩存
    4. 重啓Apache
    5. 重新啓動整個服務器

    一些技術細節:

    • OS:CentOS的5.9
    • Web服務器: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頭中包含路徑


    01在包含路徑

    Garbled content in the include path 亂碼內容


    More garbled content in the include path 在包括路徑


    我出的選項和思路更加亂碼內容。任何幫助將不勝感激。

  • +0

    冒着明顯的風險,這看起來像一個PHP的錯誤。 – zneak 2013-02-26 16:20:38

    +0

    您可以嘗試在try catch中打包調用並打印出堆棧跟蹤。可能有助於縮小原因。 – BenOfTheNorth 2013-02-26 16:28:23

    回答

    1

    這個問題現在似乎已經解決了。由於此特定服務器是運行WHM/Cpanel的專用服務器,因此我已將此問題升級爲Cpanel支持。

    經過一番研究,問題被縮小到homeloader.so模塊,這使得每用戶PEAR庫成爲可能。禁用此模塊後,症狀消失。

    此問題的根本原因仍在調查中,但如果其他人遇到類似問題,這可能是需要考慮的問題。

    相關問題