【问题标题】:PHP Multi Curl return NULL value for the firsts urlsPHP Multi Curl 为第一个 url 返回 NULL 值
【发布时间】:2013-02-26 05:53:05
【问题描述】:

我使用多卷曲检索一些页面,从 1 到 200。 问题是 List 中的第一个链接总是返回 Empties! 我不明白为什么! O_o

$mh = curl_multi_init();

for($j=0; $j<$i; $j++){
    $ch[$j] = curl_init($Links[$j]);
    curl_setopt($ch[$j], CURLOPT_CONNECTTIMEOUT, $curlConTimeOut);
    curl_setopt($ch[$j], CURLOPT_TIMEOUT, $curlTimeOut);
    curl_setopt($ch[$j], CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch[$j], CURLOPT_MAXREDIRS, 3);
    curl_setopt($ch[$j], CURLOPT_FOLLOWLOCATION, 1);
    curl_multi_add_handle($mh, $ch[$j]);
}

$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);
    }
}
$Si = 0; $Fi = 0; $Disp = "";
for($j=0; $j<$i; $j++){
    if($ch[$j]){
        if(curl_multi_getcontent($ch[$j]) == null){
            $Disp .= '0';
            $Fi++;
        }else{
            $Disp .= '1';
            $Si++;
        }           
        curl_multi_remove_handle($mh, $ch[$j]);
        curl_close($ch[$j]);
    }
}
curl_multi_close($mh);

$Si / $Fi / $Disp 仅用于测试,结果示例如下:

链接成功率:65/161

链接失败:96/161

DISP:00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111101111110011111111001111111111111111111111111111111111 P>

0 代表失败,1 代表成功。如果N元素为0,则表示N个Link返回NULL

不可能每次都只有首字母元素返回null!!几率是多少?!?!?! 我要求 curl_error,所有内容都是:“连接在 XXXXX 毫秒后超时”!

1°:13852 毫秒

2°:13833 毫秒 ... 12676 毫秒 ... 10195 ... 并持续到 6007 毫秒,然后开始正确的!

CURLOPT_CONNECTTIMEOUT 设置为 6 秒!

为什么每次都是从一个大的数字开始到6,然后返回对吗? o_o 我想强调一下,空响应的顺序仅取决于列表!不从multicurl时间响应!

另一个链接较少的例子:

|链接成功:30/52

|链接失败:22/52

|显示:00000000000000000000001111111111011111111111111111111

【问题讨论】:

    标签: php curl null


    【解决方案1】:

    正如您所见,当您执行/请求更少的内容/页面时,您会更快地达到 1(1 是成功,0 是错误)。

    据我所知,您的第一个请求已超时。我的猜测是您需要降低每次请求/执行的数量。让我们继续执行 5,获取值,然后执行下一个 5。

    5 只是我说的一个数字,所以请测试哪个数字更适合您。如果你的处理器可以同时处理更多的东西,这个数字可能会更大。但也仅限于互联网的另一端他们的响应速度。

    希望有帮助

    【讨论】:

    • 这个脚本对我来说没有意义,少于 100 个请求!!
    • 不能发出 100 个请求是错误的,您不需要一次完成所有请求。它就像一根水管,压力太大就会爆炸。只需将请求量调低
    • 我总是可以降低它们,但我必须尽可能地提高请求的数量! 50个请求不是很多!那么为了增加我必须做什么?增加主机服务?购买更多内存?更好的CPU?可笑的是,如果我要求 160 链接,我会返回 60:65/161 成功
    • 如果我问50,我返回30:链接成功:30/52 我不认为是过载的问题......我认为主机有问题......
    猜你喜欢
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 2017-08-14
    • 1970-01-01
    相关资源
    最近更新 更多