2013-10-15 71 views
0

什麼是獲取http狀態碼的最快方法。 我有一個約10k的網址列表中檢查。最好的情況是每15分鐘檢查一次。 所以我有一個PHP腳本使用簡單的捲曲功能,並通過它們循環。但它需要太多時間。 任何建議我可以做些什麼來改善這一點?平行檢查多個網址呢? PHP可以管理多少個?我對整個演出事業很陌生。PHP比cURL更快?

這是我所:提前

public function getHttpStatus(array $list) { 
    $list = array(…); // Array contains 10k+ urls from database. 
    for($i = 0; $i < count($list); $i++) { 
      $ch = $list[$i]; 
     curl_setopt($ch, CURLOPT_NOBODY, 1); 
     curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 
     curl_setopt($ch, CURLOPT_MAXREDIRS, 5); 

     $c = curl_exec($ch); 
     $info = curl_getinfo($ch); 
     echo $info['http_code'] . '<br />'; 
    } 
} 

謝謝!

+0

或者它可能是在命令行上執行該命令的最佳方式? –

+0

也許可以考慮使用多線程(https://github.com/krakjoe/pthreads/blob/master/examples/SimpleWebRequest.php) – bwoebi

回答

2

您可能會考慮使用curl_multi_exec() - http://php.net/manual/en/function.curl-multi-exec.php,它允許您並行處理多個捲曲手柄。如果你喜歡,你可以看看使用我寫的非常輕量級的REST客戶端,它支持curl_multi_exec()。鏈接是在這裏:

https://github.com/mikecbrant/php-rest-client

現在,我沒有設置這個庫HEAD請求,這實際上會比GET請求更有效的,如果你只是在尋找響應代碼工作。但是爲了支持這樣的用例,這應該相對容易修改。

至少,這REST客戶端庫可以給你關於如何與curl_multi_exec()

顯然,工作很好的示例代碼,你需要與你應該使用基於併發請求數週圍玩你提供的硬件和服務可以處理哪些請求。

+0

一次可以執行多少個cURL句柄? –

+0

@ YeppThat'sMe可以並行執行的句柄數量將由您的系統硬件(內存,CPU)以及它可以處理的內容以及被調用服務器的響應(需要多長時間迴應,發送多少數據等)。你真的需要在你的環境中測試,看看有什麼作用。我還沒有碰到過一次只能使用20個手柄的情況。如果您必須在幾秒內執行數千個請求,那麼您應該可能正在查看另一個解決方案。 –

+0

hm好的......我猜在命令行上也是這樣。謝謝! –