php – 为什么curl_multi_select和curl_multi_info_read相互矛盾?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 为什么curl_multi_select和curl_multi_info_read相互矛盾?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
当我运行下面的代码时,我觉得curl_multi_select和curl_multi_info_read相互矛盾.据我所知,curl_multi_select应该是阻塞,直到curl_multi_exec有响应,但我还没有看到实际发生.

$url = "http://GOOGLE.COM";
$ch  = curl_init($url);
curl_setopt($ch,CURLOPT_RETURNtransfer,TRUE);
curl_setopt($ch,CURLOPT_VERBOSE,TRUE);

$mc = curl_multi_inIT();
curl_multi_add_handle($mc,$ch);

do {
  $exec = curl_multi_exec($mc,$running);
} while ($exec == CURLM_CALL_MULTI_PERFORM);

$ready=curl_multi_select($mc,100);
var_dump($ready);

$info = curl_multi_info_read($mc,$msgs);
VAR_dump($info);

这回来了

int 1
boolean false

这似乎与自己相矛盾.怎么可以准备好,没有任何消息?

我正在使用的PHP版本是5.3.9

解决方法

基本上curl_multi_select阻塞,直到有一些东西要用curl_multi_exec读取.如果在不使用curl_multi_select的情况下循环curl_multi_exec,这将占用100%的cpu.
因此curl_multi_info_read用于检查是否有任何传输已经结束(正确或有错误).

使用多句柄的代码应遵循以下模式:

do
{
    $mrc = curl_multi_exec($this->;mh,$active);
}
while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK)
{
    curl_multi_select($this->mh);
    do
    {
        $mrc = curl_multi_exec($this->mh,$active);
    }
    while ($mrc == CURLM_CALL_MULTI_PERFORM);
    while ($info = curl_multi_info_read($this->mh))
    {
        $this->PRocess_ch($info);
    }
}

另见:Doing curl_multi_exec the right way.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 为什么curl_multi_select和curl_multi_info_read相互矛盾?全部内容,希望文章能够帮你解决php – 为什么curl_multi_select和curl_multi_info_read相互矛盾?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。