2011-09-20 229 views
2

在下面的代碼片段快速瀏覽一下:爲什麼不按預期工作set_time_limit?

<? 
set_time_limit(5); 
sleep(30); 
echo 'done'; 
?> 

當我執行此我箱,腳本整整30秒,並顯示「完成」。

爲什麼?

不應該在5秒內終止並且不給腳本顯示'done'的時間?

這不是在CLI模式下。 Nginx + PHP_FPM。

任何想法?


我選擇將'答案'放在這裏,因爲下面有很多好的和有效的答案。但是......這似乎是睡眠的一個特殊問題。

<? 
set_time_limit(5); 
while(true==true){ 
} 
sleep(30); 
echo 'done'; 
?> 

按預期工作。

+3

「睡眠()」時間是否會計算執行時間? –

回答

1

引述the manual

set_time_limit()功能和配置指令 max_execution_time隻影響腳本本身 的執行時間。在確定腳本運行的最長時間 時,不包括腳本執行 以外發生的任何活動時間,例如系統調用system(),流操作, 數據庫查詢等。在測量時間是真實的Windows 上,這不是真的。

,因爲它是一個OS進程並沒有什麼正在做sleep調用不會增加了執行時間。

0

從php.net:被調用時,set_time_limit()從零開始重新啓動超時計數器。換句話說,如果超時時間是默認的30秒,並且在腳本執行過程中有25秒鐘,則調用如set_time_limit(20),腳本將在超時之前運行總共45秒。

你可以減去相匹配的時候,你要

+0

閱讀問題/代碼? –

1

按照set_time_limit()文檔:

注:

的set_time_limit()函數的功能和配置指令的max_execution_time隻影響腳本本身的執行時間。在確定腳本運行的最長時間時,不包括使用system()系統調用,流操作,數據庫查詢等腳本執行之外發生的任何活動時間。在測量時間是真實的Windows上,這不是事實。

sleep()的調用不算作執行時間(Windows下除外)。此行爲已在set_time_limit()頁面的註釋中詳細記錄。

相關問題