3

申し訳ありませんが、実際にこの質問を何度もしましたが、答えを完全に理解することはできませんでした.

これが私の現在のコードです:

while($resultSet = mysql_fetch_array($SQL)){            
$ch = curl_init($resultSet['url'] . $fullcurl); //load the urls and send GET data
            curl_setopt($ch, CURLOPT_TIMEOUT, 2);           //Only load it for two seconds (Long enough to send the data)
            curl_exec($ch);                                 //Execute the cURL
            curl_close($ch);                                //Close it off 
} //end while loop

私がここで行っているのは、MySQL データベース ($resultSet['url']) から URL を取得し、そこに追加の変数をいくつか追加し、GET データ ($fullcurl) だけを追加して、ページをリクエストするだけです。これにより、これらのページでスクリプトの実行が開始されます。このスクリプトが実行する必要があるのは、これらのスクリプトを開始することだけです。出力を返す必要はありません。スクリプトを開始するのに十分な長さでページをロードするだけです。

ただし、現在は各 URL (現在 11 個) を 1 つずつ読み込んでいます。それらすべてを同時にロードする必要があります。curl_multi_ を使用する必要があることは理解していますが、cURL 関数がどのように機能するかについてはまったくわかりません。そのため、while ループでcurl_multi_ を使用するようにコードを変更する方法がわかりません。

だから私の質問は:

このコードを変更して、すべての URL を同時にロードするにはどうすればよいですか? コードだけでなく、説明してください。個々の機能が正確に何をするのか知りたいです。while ループは各行を 1 つずつ送信するだけなので、curl_multi_exec は while ループでも機能しますか?

もちろん、cURL 関数に関するリファレンス、ガイド、チュートリアルも同様に役立ちます。できればphp.netからはそれほど多くはありません.構文を教えてくれるのは良い仕事ですが、少し乾いていて説明があまり得意ではありません.

編集:わかりましたzaf、これが現在の私の現在のコードです:

        $mh = curl_multi_init(); //set up a cURL multiple execution handle

$SQL = mysql_query("SELECT url FROM urls") or die(mysql_error()); //Query the shell table
                    while($resultSet = mysql_fetch_array($SQL)){   

        $ch = curl_init($resultSet['url'] . $fullcurl); //load the urls and send GET data
        curl_setopt($ch, CURLOPT_TIMEOUT, 2);           //Only load it for two seconds (Long enough to send the data)
        curl_multi_add_handle($mh, $ch);
    } //No more shells, close the while loop

        curl_multi_exec($mh);                           //Execute the multi execution
        curl_multi_close($mh);                          //Close it when it's finished.
4

1 に答える 1

3

whileループでは、URLごとに次のことを行う必要があります。

  • curl_init()を使用してcurlリソースを作成します
  • curl_setopt(..)によってリソースのオプションを設定します

次に、curl_multi_init()を使用して複数のcurlハンドルを作成し、curl_multi_add_handle(...)を使用して以前のすべての個々のcurlリソースを追加する必要があります。

そして最後に、curl_multi_exec(...)を実行できます。

良い例はここにあります:http://us.php.net/manual/en/function.curl-multi-exec.php

于 2010-04-26T13:52:53.610 に答える