2012年1月27日

[PHP-users 35658] cURL_multiの挙動について質問させてください

cURL_multiについて質問させてください。

1.
マニュアルを見ると、例で
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);
}
}
のように書かれています。
しかし、挙動が理解できません 。
何故全く同じdo~whileを2回も書いているのでしょうか?
var_dump()などしましたが、分かりませんでした。
マニュアルの下に書かれている外国の方のサンプルでは、1回のみ書かれているのもあり、自分もそれで取得の確認は出来ました。
某掲示板で質問したところ、「multiの実行完了とサブ接続の実行完了の違い」と言われましたが、自分には理解が出来ませんでした。
上記のサンプルコードはどのようになっているのでしょうか?


2.
curl_multiを使った場合、取得中のエラー等による制御方法が分かりません。
自分は
$active = NULL;
do
{
curl_multi_exec($mh, $active);
} while ($active > 0);
$results = array();
for ($i = 0; $i < $node_count; $i++)
{
$results[$url_list[$i]] = curl_multi_getcontent($curl_arr[$i]);
$info = curl_getinfo($curl_arr[$i]);
//TODO:エラー処理はこの位置で正しい?
//以下はManual参考
if (curl_errno($curl_arr[$i]))
{
echo 'Curl error: ' . curl_error($curl_arr[$i]);
}
curl_multi_remove_handle($mh, $curl_arr[$i]);
curl_close($curl_arr[$i]);
}
curl_multi_close($mh);
のようにしたのですが、存在しないurlや404を返すurlを指定しても、curl_errno()やcurl_error()をvar_dump()しても0が返ってきます。
「StatusCodeが200以外の場合は」とか、「相手との通信がおかしい」とか「30秒以上かかったらエラー」とかで分岐したいと考えております。
1.のコード中などには書き入れるような場所もないと思うので、2.で書いたコードの様にfor()内などで書くのではないかと思うのですが・・・。
curl_getinfo()の位置はここでいいのだろうと思ってはいます。

具体的にアドバイス頂けないでしょうか?


長くなりましたが、申しわけございませんが以上の点、宜しくお願いいたします。

_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2012年1月27日 20:50
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/108271
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。