PHP Multi Curl为第一个url返回NULL值

时间:2013-03-11 05:56:42

标签: php curl null

我使用多卷曲来检索一些页面,从1到200。 问题是列表中的第一个链接返回始终是空的! 我不明白为什么!! 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:0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111101111110011111111001111111111111111111111111111111111

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

每次都不可能,只有首字母元素返回null!有什么可能性?!?!?! 我要求curl_error,全部用:“连接在XXXXX毫秒后超时”!

1°:13852毫秒

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

CURLOPT_CONNECTTIMEOUT设置为6秒!

为什么每次从较高的数字开始并转到6,并且在返回之后? O_O 我想强调一下,null响应的顺序只取决于列表!不是来自多次响应!

链接较少的另一个示例:

|链接成功:30/52

|链接失败:22/52

| Disp:0000000000000000000001111111111011111111111111111111

1 个答案:

答案 0 :(得分:0)

正如您所看到的那样,当您执行/请求更少的内容/页面时,您将更快地点击1(1表示成功,0表示错误)。

根据我的理解,我听到您的第一个请求暂时停止。我的猜测是你需要降低每次请求/执行的数量。让我们留下你需要执行5,获取值然后接下来5。

5只是我说的一个数字,所以测试哪个数字对你来说更好。如果您的处理器可以同时处理更多内容,则此数字可能会更大。但也仅限于互联网的另一方,他们的反应速度有多快。

希望能帮助