2010-07-26 128 views
1

我的問題是圍繞在PHP中使用curl_multi_exec。我使用類似於此鏈路上示出的例子的代碼:http://www.rustyrazorblade.com/2008/02/curl_multi_exec/使用curl_multi_exec處理錯誤

隨着大約10的URL來執行,我有時遇到的錯誤消息: Fatal error: Maximum execution time of 30 seconds exceeded in...此消息指向的代碼中的curl_multi_exec線。

儘管如此,我仍然需要繼續處理,並且還使用手段來記錄哪些URL無法執行。

有人可以幫我處理這種情況嗎?

謝謝!

+0

在每個curl句柄上使用[curl_getinfo()](http://php.net/manual/en/function.curl-getinfo.php)來了解請求的執行時間和錯誤。但@JochenJung是正確的,你的本地腳本超時,10個請求的總時間超過你的30秒限制。您將不得不增加本地腳本的30秒超時時間,或者減少默認爲無限制的[CURLOPT_CONNECTTIMEOUT/CURLOPT_TIMEOUT](http://php.net/manual/en/function.curl-setopt.php)時間。 – Chloe 2016-08-31 19:52:44

回答

1

我會嘗試讓父進程分叉子進程。父進程能夠等到孩子完成並可以看到孩子的退出代碼。因此,如果url被成功處理,那麼它的退出代碼爲0,否則非零代表錯誤。

父進程仍然需要有一個較長的max_execution_time設置,可以在腳本本身內設置該設置,而子進程的max_execution_time設置爲30秒。

下面是如何使用PHP 叉http://www.electrictoolbox.com/article/php/process-forking/

您可以設置父的max_execution_time這樣

set_time_limit (0) 

0將允許腳本沒有時間限制運行。

只是關於子進程的一個附註,必須允許子進程在殺死父進程之前完成,否則你可以讓殭屍進程沒有人擁有它們。

+0

沒有更直接的方式知道curl_multi_exec操作已超時爲相關的URL嗎? 我感覺應該有一種方法來通過更新某個變量來指示失敗。 – Enthusiast 2010-07-27 10:18:27

1

如果您有權訪問php.ini文件,則可以增加max_execution_time設置。這是幾秒鐘內PHP腳本可以運行的時間。

+0

我仍然想保持30秒的執行時間限制,並確定哪些URL超出了時間限制,所以我不會使用此選項。 – Enthusiast 2010-07-26 16:29:03