2017-07-19 69 views
0

這個簡單的測試,調用參數或者set_time_limit 10倍:php的參數或者set_time_limit(0)掛起並拋出HTTP 500

<?php 
echo("<html><head><title>set_time test</title></head><body><h1>set_time test</h1>"); 
for ($i=0; $i<10; $i++) { 
    error_log("Round $i"); 
    set_time_limit(0); echo("<p>$i</p>"); 
} 
echo("</body></html>"); 

掛起永遠與錯誤:

// Fatal error: Maximum execution time of 30 seconds exceeded in .../_set_time.php on line 4 
// Call Stack: 
// 0.0007 231768 1. {main}() .../_set_time.php:0 
// 0.0007 232000 2. set_time_limit() .../_set_time.php:4 

30秒的max_execution_time在值php.ini。如果我將它提高到3000,劇本就會繼續旋轉。我有AllowOverrideAll作爲apache配置中的文檔根(假設它很重要 - 它不應該,但仍然)

類似的機器(相同的OS & SW版本,配置非常接近)每次都完美地運行腳本。日誌文件不顯示。谷歌搜索大多是默默無聞或無關緊要的。似乎有些奇怪的系統/配置怪癖。

想法?

OS: CentOS 6.9
apache 2.2.15
php 5.6 (webtatic RPM:php56w-5.6.30-1.w6.x86_64)

編輯:提交給Xdebug的項目作爲錯誤:https://bugs.xdebug.org/view.php?id=1457

+0

拋出的錯誤是什麼?這看起來像你的代碼進入一個無限循環... –

+0

無需調用set_time_limit(0);到for循環。只需將其設置爲您的腳本的第一行一次即可。它會將您的腳本時間限制設置爲無限。 –

+0

錯誤(如帖子中顯示的)超出了執行時間 - 但正如前面提到的,在php.ini中提高執行時間只會讓它永遠掛起,主要是第一次調用set_time_limit。循環運行10次($ i <10)。我不需要在循環中調用set_time_limit,該代碼只是一個POC來觸發我在moodle安裝中觀察到的行爲 - 這種行爲掛在這樣一個調用上。 –

回答

0

OK,所以罪魁禍首是Xdebug擴展(安裝在一臺機器上,但不是在其他)。通過刪除它(php56w-pecl-xdebug-2.5.3-1.w6.x86_64),不需要的行爲就消失了。有點棘手,花費了2天以上的時間纔將它縮小到set_time_limit並找到了負責任的擴展。

相關問題