34

curl_multi_exec を理解しようとしています。ここにマニュアルの例の一部をコピーしました。だから私は疑問に思っています、それはどのように機能しますか?最初のループは、私が推測する http 要求を送信しますか? しかし、その後、一見文書化されていないフラグを持つ関数を使用して、ループ内のループが続きます..

+=70 個の URL +=を並行してダウンロードしたいと考えています。

http://www.php.net/manual/en/function.curl-multi-exec.php

<?php
...
$active = null;
//execute the handles
do {
    $mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
    if (curl_multi_select($mh) != -1) {
        do {
            $mrc = curl_multi_exec($mh, $active);
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
}
...
?>
4

1 に答える 1

24

この例について説明している 2 つの記事を調べることができます。

PHP と curl_multi_exec

まず、ハイレベルです。2 つの外側ループがあります。最初のものは、現時点でカール バッファをクリアする役割を果たします。2 つ目は、さらに情報を待ち、その情報を取得する役割を果たします。これは、ブロッキング I/O と呼ばれるものの例です。ネットワーク I/O が完了するまで、残りのプログラムの実行をブロックします。これは、一般的にネットワーク I/O を処理するための最も好ましい方法ではありませんが、シングル スレッドの同期 PHP では実際に唯一の選択肢です。

curl_multi_exec を正しい方法で実行する

最初に$mrc変数とマニュアルから、応答が cURL 定義済み定数で定義された cURL コードであることを学びます。本質的には、これは通常の応答であり、他の PHP 関数と同様にcurl_multi_exec違いはなく、終了したときにのみ応答を返します。つまり、応答は 1 つだけである必要があります。完璧な世界では、この単一の応答は 0 (ゼロ) または事前定義された定数に等しくなりCURLM_OKます。

于 2013-03-26T10:04:30.577 に答える