2012-03-13 16 views
1

私はPHPを使用してデータベースからURLのリストを取得します。各URLは、Webサイトが有効かどうかを確認するためにcurlを使用するPHPのCheck_URL関数によってチェックされます。CurlとPHPの使用

function Check_URL($url) { 

    $agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"; 
    $ch = curl_init(); 
    curl_setopt ($ch, CURLOPT_URL, $url); 
    curl_setopt ($ch, CURLOPT_USERAGENT, $agent); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt ($ch, CURLOPT_TIMEOUT, 3); 
    $page = curl_exec($ch); 
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

    curl_close($ch); 
    if ($httpcode >= 200 && $httpcode <= 301) { 
     return true; 
    } else { 
     return false; 
    } 
} 

残念ながら、このページは永久に読み込まれます。私はcurl_multi_init()を読んだ。私の解決策かもしれませんが、私は自分が持っているものにどのように実装できるのかよくわかりません。前もって感謝します。

+0

サーバー上にページを読み込むと、この関数が呼び出され、いくつかのURLがチェックされますか?つまり、ページの読み込みだけでなく、CURLによってXのURLが読み込まれるのを待っていることを意味します。いくつのURLをロードしていますか?あなたのページのイメージのように、あなたのスクリプトを引き起こす何かがあるのを調べることができます。 – Aerik

+1

これは、ユーザーのためにページをレンダリングするスレッドとは別に、実際にバックグラウンドで行うべきことです。これらのURLのタスクをbeanstalkdにスローし、それらをテストして結果をdbに格納するワーカーを作成します。 –

+0

@Aerik - 30のURLを開始します。 – Joe

答えて

0

curl_multi_initを初期化した後、forループまたはforeachループでURLを反復処理する必要があります。あなたはここで良い例を見つけるでしょう:http://www.fusionswift.com/examples/2011/08/php-curl_multi_exec-example/

あなたの関数として、私はパラメータとしてURLの配列を扱うでしょう。

+1

良い入力のように聞こえて、再初期化のオーバーヘッドを節約しますが、彼はまだ30のURLをロードしようとしています...私は彼が彼のページに画像を持っている必要があると思うURLを確認するか、 。 – Aerik

+1

@Aerik - あなたは大丈夫です - これらのURLのすべてが読み込まれるかテストされるのを待っている場合、それはエンドユーザーにとって優れたUIエクスペリエンスではありません。代わりに、最初のページをロードして、AJAX呼び出しでこの機能を処理し、ユーザーにある種の有益なメッセージが与えられるようにすることもできます。 – SBerg413

0

また、CURLOPT_CONNECTTIMEOUTオプションも使用してください。

CURLOPT_NOBODYをTRUEに設定すると、関数はより速く動作します。

複数のURLを確認する場合は、this codeをご覧ください。

関連する問題