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

标签 php curl null

我使用 multi curl 检索一些页面,从 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

其中 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

|显示:0000000000000000000001111111111011111111111111111111

最佳答案

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

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

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

希望对你有帮助

关于PHP Multi Curl 为第一个 url 返回 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15332074/

相关文章:

php - 使用 PHP 的 Postgres 备份数据

javascript - 在本地主机上的 .php 文件中测试 jQuery 但无法正常工作

curl - CouchDB 附件无法打开

windows - 名称中带有冒号的文件会发生什么情况?

Android 访问加速度计 : Returns always 0 as Value

php - 我可以在 PHP 中使用多个类来扩展一个类吗?

php - 我如何制作像 Facebook 这样的照片库?

php - PayPal IPN 已停止工作

MySQL 在文件中加载数据 - 将所有列的特定值替换为 null

java - 我们可以在检查嵌套 java 对象中的 null 时避免 npe 吗?