可能重複:
Asynchronous HTTP requests in PHP執行大量HTTP請求(HEAD)的最快方法是什麼?
我有一個使用foreach循環,並從一個文件中獲取的項目ID和檢查HEAD請求腳本如果狀態200.這段腳本需要很長時間才能運行,那麼有什麼方法可以一次完成多個請求嗎?我知道,如果我用$ .ajax()做一個for循環,它會一次啓動它們。我怎麼能得到這個行爲與PHP或有沒有其他的批處理?
可能重複:
Asynchronous HTTP requests in PHP執行大量HTTP請求(HEAD)的最快方法是什麼?
我有一個使用foreach循環,並從一個文件中獲取的項目ID和檢查HEAD請求腳本如果狀態200.這段腳本需要很長時間才能運行,那麼有什麼方法可以一次完成多個請求嗎?我知道,如果我用$ .ajax()做一個for循環,它會一次啓動它們。我怎麼能得到這個行爲與PHP或有沒有其他的批處理?
單個請求很簡單(就像你注意到的一樣)。 Justloop通過和使用PEAR庫HTTP_Request2並作出HEAD請求:
$request = new HTTP_Request2('http://www.your_url.com/',
HTTP_Request2::METHOD_HEAD);
$response = $request->send();
if (200 == $response->getStatus()) {
echo "Yippie... a 200";
}
您也可以使用PHP curl庫,但它更futz處理:Header only retrieval in php via curl
然而,要做到這一點的同時使用PHP,你需要使用像exec()這樣的東西來分離其他的PHP腳本,因爲PHP本身並不支持線程化編程或併發性。同樣,你也可以使用某種自定義的工作/工作者隊列使用減速機或其他東西,但這很相關。
使用curl_multi_*
功能。請參閱http://www.php.net/manual/en/function.curl-multi-exec.php
小心!如果您知道這需要很長時間,那麼您可能會請求數百或數千個網址。一定不要壓倒目標服務器。
另請注意,根據在目標上運行的代碼,HEAD
請求需要完成的工作量可能與GET
請求完全相同。所以唯一的優化是不將數據傳輸給你。這可能被誤認爲是拒絕服務攻擊。