php.net - curl_multi_exec() の例を参考にしながらPHPの並列処理を考えているのですが、無限ループに陥ってしまっているような感じで、応答が返ってきません。
lang
1<?php 2// cURL リソースを作成します 3$ch1 = curl_init(); 4$ch2 = curl_init(); 5 6// URL およびその他適切なオプションを設定します。 7curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/"); 8curl_setopt($ch1, CURLOPT_HEADER, 0); 9curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/"); 10curl_setopt($ch2, CURLOPT_HEADER, 0); 11 12// マルチ cURL ハンドルを作成します 13$mh = curl_multi_init(); 14 15// ふたつのハンドルを追加します 16curl_multi_add_handle($mh,$ch1); 17curl_multi_add_handle($mh,$ch2); 18 19$active = null; 20// ハンドルを実行します 21do { 22 $mrc = curl_multi_exec($mh, $active); 23} while ($mrc == CURLM_CALL_MULTI_PERFORM); 24 25while ($active && $mrc == CURLM_OK) { 26 if (curl_multi_select($mh) != -1) { 27 do { 28 $mrc = curl_multi_exec($mh, $active); 29 } while ($mrc == CURLM_CALL_MULTI_PERFORM); 30 } 31} 32 33// ハンドルを閉じます 34curl_multi_remove_handle($mh, $ch1); 35curl_multi_remove_handle($mh, $ch2); 36curl_multi_close($mh); 37
サンプルコードをそのまま実行すると、26行目の
lang
1if (curl_multi_select($mh) != -1) {
の条件分岐で必ずfalseになってしまい、25行目のwhile文が無限ループになっているようです。
実行環境の問題でしょうか。上記コードを正常に実行するための条件が何かあれば、教えてください。
また、curl_multi_exec関数を使った並列処理はどのように書くのが良いのでしょうか。どこかに良いお手本コードはありませんか?
####検証環境
OS: CentOS7.3.1611
PHP: PHP 5.4.16 (CentOS baseリポジトリからyumでインストール)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/19 05:31