关于PHP的curl_multi*的相关应用问题

z321yntx 2015-05-31 11:46:58
先看一段代码,摘自PHP手册curl_multi_select

<?php
// 创建一对cURL资源
$ch1 = curl_init();
$ch2 = curl_init();

// 设置URL和相应的选项
curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");
curl_setopt($ch2, CURLOPT_HEADER, 0);

// 创建批处理cURL句柄
$mh = curl_multi_init();

// 增加2个句柄
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);

$active = null;
// 执行批处理句柄
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);
}
}

// 关闭全部句柄
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);


测试时,while ($active && $mrc == CURLM_OK) 这个地方是个死循环啊。$active打印为2,$mrc为0,CURLM_OK这个常的值为0.

这段代码中,第一个do-while与第二个do-while有什么区别呢,不懂得这意思。

希望写下几个循环处表示什么意思,谢谢。
...全文
196 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
z321yntx 2015-05-31
  • 打赏
  • 举报
回复
http://php.net/manual/zh/function.curl-multi-exec.php 在手册中可以找到。 不懂CURLM_CALL_MULTI_PERFORM 或 CURLM_OK等这些常的意思。
xuzuning 2015-05-31
  • 打赏
  • 举报
回复
你确认这是官方的例子吗?请给出链接 我一般不用 curl_multi_select,只这样写
$connomains = array(
   "http://www.cnn.com/",
   "http://www.canada.com/",
   "http://www.yahoo.com/"
   );

$mh = curl_multi_init();

foreach ($connomains as $i => $url) {
       $conn[$i]=curl_init($url);
       curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,1);
       curl_multi_add_handle ($mh,$conn[$i]);
}

do { $n=curl_multi_exec($mh,$active); } while ($active);

foreach ($connomains as $i => $url) {
       $res[$i]=curl_multi_getcontent($conn[$i]);
       curl_close($conn[$i]);
}


print_r($res);
ohmygirl 2015-05-31
  • 打赏
  • 举报
回复
while ($active && $mrc == CURLM_OK) 这个地方应该不会是死循环。 因为内层的do..while中$mrc = curl_multi_exec($mh, $active); 但是curl_multi_select确实可能会长时间阻塞。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧