在我的脚本中,如果我直接使用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] =>
答案 0 :(得分:2)
这里应该实现的缓冲区大小设置是什么?
根据手册,
每次读取时使用的缓冲区大小。但是,无法保证满足此要求。
这似乎是减缓这里事情的因素。通过限制读取缓冲区大小,读取速度变慢 - 有点可理解;-)它可能具有更高的默认值,或者除非指定,否则根本不会发生缓冲 - 因此除非API /具有特定要求您正在提出请求的端点,最好不要指定它。