PHP - curl比file_get_content

时间:2017-12-28 16:45:32

标签: php curl

在我的脚本中,如果我直接使用file_get_content并下载文件,则结果在1秒内。

但是,如果我使用CURL,我会等待大约5秒钟。这是我的代码,有什么不对吗?

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 64);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
curl_setopt($ch, CURLOPT_URL, $url);

$dataStream = curl_exec($ch);
if ($dataStream === false)
{
    $lastError = curl_error($ch);
}
curl_close($ch);

//process $dataStream

两个连接都使用HTTPS协议上的$url

我的主服务器上curl_getinfo的输出:

  

[content_type] => text / html [http_code] => 200 [header_size] => 433   [request_size] => 214 [filetime] => -1 [ssl_verify_result] => 0   [redirect_count] => 0 [total_time] => 5.336287 [namelookup_time] =>   0.000472 [connect_time] => 0.000722 [pretransfer_time] => 0.121571 [size_upload] => 0 [size_download] => 398 [speed_download] => 74   [speed_upload] => 0 [download_content_length] => 398   [upload_content_length] => 0 [starttransfer_time] => 0.33125   [redirect_time] => 0 [redirect_url] =>

我也在我的localhost机器上尝试了相同的代码,它与CURL一起工作得很好。我的localhost测试服务器上的curl_getinfo输出:

  

[content_type] => text / html [http_code] => 200 [header_size] => 433   [request_size] => 207 [filetime] => -1 [ssl_verify_result] => 0   [redirect_count] => 0 [total_time] => 0.328 [namelookup_time] => 0   [connect_time] => 0.031 [pretransfer_time] => 0.109 [size_upload] => 0   [size_download] => 376 [speed_download] => 1146 [speed_upload] => 0   [download_content_length] => 376 [upload_content_length] => -1   [starttransfer_time] => 0.328 [redirect_time] => 0 [redirect_url] =>

1 个答案:

答案 0 :(得分:2)

这里应该实现的缓冲区大小设置是什么?

根据手册,

  

每次读取时使用的缓冲区大小。但是,无法保证满足此要求。

这似乎是减缓这里事情的因素。通过限制读取缓冲区大小,读取速度变慢 - 有点可理解;-)它可能具有更高的默认值,或者除非指定,否则根本不会发生缓冲 - 因此除非API /具有特定要求您正在提出请求的端点,最好不要指定它。