2014-10-28 43 views
-1

我知道獲取http響應代碼非常容易,就像我們可以使用get_headers()函數一樣,或者我們也可以使用cURL,但是我有3百萬個url。快速獲取Url的http響應代碼

所以請告訴我如何快速獲取每個網址的狀態。

因爲在目前的情況下,每個網址約需1秒,那麼您可以計算完成需要多少時間。

error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING); 
$row = 1; 
if (($handle = fopen("2.6MMURL-10-14.csv", "r")) !== FALSE) { 
$i = 1; 
//echo '<pre>'; 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 

     //print_r($data[0]); 
     $result = getStatus($data[0]); 
     echo $result."<br />"; 
     // print_r($result); 
     if($i == 16) 
     { 
     echo $i; 
     //appendToCsv($result); 

     //exit; 
     } 

     $i++; 
    } 


    fclose($handle); 
} 
exit; 
function getStatus($fileSource) { 
//$fileSource = "www.google.com"; 
$time = date("Y-m-d H:i:s"); 
    $ch = curl_init($fileSource); 
    curl_setopt($ch, CURLOPT_NOBODY, true); 
    curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');   
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_HEADER, true); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); 
    curl_setopt($ch, CURLOPT_NOBODY, true); 
    $last_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); 
    $response = curl_exec($ch); 
    //print_r($response); exit; 
    preg_match_all('/^Location:(.*)$/mi', $response, $matches); 
    $retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

    curl_close($ch); 
    //!empty($matches[1]) ? $redirect = trim($matches[1][0]) : $redirect = 'No redirect found'; 
    $redirect = trim($matches[1][0]); 
$time.= date("Y-m-d H:i:s"); 
$array = "$fileSource, $retcode, $trim($matches[1][0], $time"; 
return $array; 
    //print_r($last_url); exit; 

    //curl_close($ch); 
    } 

function appendToCsv($data) { 
    header('Content-Type: application/excel'); 
header('Content-Disposition: attachment; filename="sample.csv"'); 


$fp = fopen('php://output', 'w'); 
foreach ($data as $line) { 
    $val = explode(",", $line); 
    fputcsv($fp, $val); 
} 
fclose($fp); 

} 
+1

什麼碼你嘗試過這麼遠嗎? – 2014-10-28 21:51:21

+1

開始並行運行請求。除非您在300波特率的撥號線路上進行此操作,否則幾乎無法加速網絡組件。所以要麼並行運行更多的請求(簡單),要麼找到某種方法來減少每個請求時間(難以/不可能)。 – 2014-10-28 21:52:57

+0

使用wget,像這樣 - http://unix.stackexchange.com/questions/61132/how-do-i-use-wget-with-a-list-of-urls-and-their-corresponding-output-文件 – Cheery 2014-10-28 21:55:17

回答

0

我推薦使用curl_multi_exec運行多個並行的HEAD HTTP請求。 HEAD請求與GET相同,但沒有響應主體。它還會爲您節省一些帶寬/時間。