加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

与CURL Multi PHP不一致

发布时间:2020-12-25 10:51:23 所属栏目:Linux 来源:网络整理
导读:副标题#e# 当我对10个URL进行检查时,如果我能够与主机服务器建立连接,则句柄将返回成功消息(CURLE_OK) 当服务器拒绝连接时处理每个句柄时,句柄将包含错误消息. 问题 我假设当我们得到一个坏句柄时,CURL将标记此句柄但继续处理未处理的句柄,但这似乎不会发生

在我的原始答案中,我在while循环中使用了curl_multi_info_read.此循环将继续迭代,直到curl_multi_info_read在队列中找不到剩余数据.如果$active!= 0(意味着curl_multi_exec报告传输仍未完成),则外部while循环将移动到下一次迭代.

总而言之,当仍然没有完成传输时,外部循环继续迭代,并且内部循环仅在完成传输的数据时才进行迭代.

PHP文档对于curl多功能非常糟糕,所以我希望这清除了一些东西.下面是另一种做同样事情的方法.

do 
{
    curl_multi_exec($mh,$active);
} while ($active > 0);

// while($info = curl_multi_info_read($mh)) would work also here
for($i = 0; $i <= $f; $i++){
    $info = curl_multi_info_read($mh);

    if($info['result'] === 0)
    {
        echo curl_getinfo($info['handle'],CURLINFO_EFFECTIVE_URL) . ' success<br>';
    }
    else
    {
        echo curl_getinfo($info['handle'],CURLINFO_EFFECTIVE_URL) . ' failed<br>';
    }
}

根据这些信息,您还可以看到不需要curl_multi_select,因为您不希望在有活动之前阻塞某些东西.

使用您在问题中提供的代码,似乎只有在几次传输失败后curl没有继续进行,但实际上仍有数据在缓冲区中排队.你的代码没有足够多次调用curl_multi_info_read.您的代码获取所有成功传输的原因是由于PHP在单个线程上运行,因此脚本挂起等待请求.失败请求的超时不足以使PHP挂起/等待那么长时间,因此while循环执行的迭代次数少于排队数据的次数.

(编辑:源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读