web-dev-qa-db-ja.com

PHP curl_multi_execを理解する

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);
    }
}
...
?>
31
glennv

この例を説明する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に等しいです。

25
sectus