1

重複の可能性:
cURL Mult Simultaneous Requests (ドメイン チェック)

Webサイトが存在するかどうかを確認しようとしています。(応答があればそれで十分です) 問題は、ドメインの配列が 20,000 であり、プロセスを可能な限りスピードアップしようとしていることです。

私はいくつかの調査を行い、同時cURLリクエストの詳細を説明するこのページに出くわしました-> http://www.phpied.com/simultaneuos-http-requests-in-php-with-curl/

また、ドメイン Web ページがアップしているかどうかを確認する良い方法と思われるこのページも見つけました -> http://www.wrichards.com/blog/2009/05/php-check-if-a-url-exists-with -カール/

20,000 のドメインをすばやくチェックして、それらが稼働しているかどうかを確認する方法について何かアイデアはありますか?

4

4 に答える 4

2
$http = curl_init($url);
$result = curl_exec($http);
$http_status = curl_getinfo($http, CURLINFO_HTTP_CODE);
curl_close($http);
if($http_status == 200) // good here
于 2012-09-22T20:44:27.093 に答える
1

ローリングカールをチェック

複数の curl リクエストを実行できます。次に例を示します。

    require 'curl/RollingCurl.php';
    require 'curl/RollingCurlGroup.php';


    $rc = new RollingCurl('handle_response');
            $rc->window_size = 2;




            foreach($domain_array as $domain => $value)
            {






                 $request = new RollingCurlRequest($value);

                // echo $temp . "\n";


                    $rc->add($request);




            }

            $rc->execute();




    function handle_response($response, $info)
    {

            if($info['http_code'] === 200)
            {
                // site exists handle response data
            }

    }
于 2012-09-22T20:52:58.250 に答える
1

プロセスを高速化し、帯域幅を大幅に節約したい場合 (定期的に可用性を確認するように指示したため)、curl ではなくソケットを使用する必要があります。一度に複数のソケットを開き、各ソケットの「非同期」処理を調整できます。次に、「GET $sitename/ HTTP/1.0\r\n\r\n」リクエストではなく、「HEAD $sitename/ HTTP/1.0\r\n\r\n」リクエストを送信する必要があります。GET 要求が返すのと同じステータス コードを返しますが、応答本文はありません。回答を取得するには、応答の最初の行のみを解析する必要があるため、適切な応答コードで regex_match することができます。さらに最適化の 1 つとして、コードは最終的にどのサイトが同じ IP にあるかを学習するので、名前のマッピングをキャッシュし、リストを IP で並べ替えます。

于 2012-09-22T21:01:31.603 に答える
0

複数の curl リクエストを使用できますが、おそらく一度に 10 程度に制限する必要があります。キューを処理するために別のデータベースでジョブを追跡する必要があります: PHP のスレッド

于 2012-09-22T20:49:21.150 に答える