PHP Curl请求超时/页面停止加载?

时间:2019-01-22 02:51:32

标签: php curl

我向不同的网站发送了大约600个Curl请求,有时我的页面停止/中断,这是我遇到的错误。

Website.com意外关闭了连接。 ERR_INCOMPLETE_CHUNKED_ENCODING

我正在我的600个网站中循环使用以下功能。

function GetCash($providerUrl, $providerKey){

$url = check_protocol($providerUrl);
$post = [
    'key' => Decrypt($providerKey),
    'action' => 'balance'
];

// Sets our options array so we can assign them all at once
$options = [
    CURLOPT_URL        => $url,
    //CURLOPT_POST       => false,
    CURLOPT_POSTFIELDS => $post,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CONNECTTIMEOUT => 5,
    CURLOPT_TIMEOUT => 5,
];

// Initiates the cURL object
$curl = curl_init();
curl_setopt_array($curl, $options);
$json = curl_exec($curl);

curl_close($curl);

//Big variable of all the values
$services = json_decode($json, true);
//Check for invalid API response
if($services['error'] == "Invalid API key"){
    return FALSE;
}else{
    return $services['balance'];
}
return FALSE;

}

1 个答案:

答案 0 :(得分:0)

如果您以同步方式向600个不同的网站发送请求,则该请求很可能仅超出了PHP的时间限制。根据页面输出的内容,它可能会突然截断数据,从而导致此错误。要查看是否是这种情况,请尝试仅查询一些网站。

您也许可以在PHP代码中运行set_time_limit(0)来删除时间限制,但是它仍然可能导致某种浏览器超时。因此,通常最好从没有时间限制的命令行运行长时间运行的任务,例如php /path/to/script.php

如果您仍然需要将结果显示在HTML页面上,则可以考虑生成background task,将其进度保存到某种文本文件或数据库中,并使用{{3 }},以不断检查进度。