2011-04-15 135 views
4

我有一個PHP類,一旦調用,將時間限制設置爲60秒。關於這個類唯一特別的是它使用了curl_multi_exec()。PHP執行時間超過max_execution_time ...有時

set_time_limit(60); 
ini_set('max_execution_time', 60); 

的問題是,在Apache的/服務器狀態頁面,此頁面和使用單線程另一個捲曲跑過去他們的max_execution_time和高達200秒,有時!

我錯過了什麼?有沒有辦法設置Apache來終止運行時間超過90秒的腳本(甚至是連接)?

回答

4

the manual

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

由於捲曲請求屬於此類別,因此等待請求完成的時間將不計入在內。您應該將捲曲設置CURLOPT_TIMEOUT設置爲較低的值,或者監視您自己執行腳本所花費的時間。

+0

這很有道理。我剛剛檢查過這個函數,CURLOPT_CONNECTTIMEOUT是15,CURLOPT_TIMEOUT是12,最多不到200秒。 – Amer 2011-04-15 14:51:11

2

啊哈!當您設置該配置時,代碼復位本身,例如:

sleep(10); 
set_time_limit(20); 
sleep(10); 
set_time_limit(5); 
sleep(10); // dies after 5 seconds 

總運行時間約爲30秒。

關於curl_exec_multi,您可以設置CURL超時選項而不是PHP。這取決於誰會寧願死在你的意見 - 捲曲連接,或完整的要求。

+0

我添加了一些時間計數器來調查。謝謝。 – Amer 2011-04-15 14:57:29