近期发现使用curl PHP下载七牛云存储中的文件时,下载速度极其缓慢,令人十分不解。
在进行相关调查后,发现七牛的文件下载速度受到以下几方面因素影响:
1、地域因素:
$ch = curl_init($url);
//设置超时
curl_setopt($ch,CURLOPT_TIMEOUT,$timeout);
// 取消https证书验证
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
// 响应体
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$response = curl_exec($ch);
// 状态码
$statusCode = curl_getinfo($ch,CURLINFO_HTTP_CODE);
curl_close($ch);
return array('statusCode' => $statusCode,'response' => $response);
针对地域因素,我们可以在代码中设置代理服务器来实现加速。通过在请求头中添加参数,使请求首先经过代理服务器进行转发,从而实现加速效果。比如,可以在代码中添加以下代码:
curl_setopt($ch,CURLOPT_PROXY,"代理服务器IP:代理服务器端口号");
这样在请求过程中,请求将会先通过代理服务器进行转发,减少请求发起到接收的时间,达到加速效果。
2、连接协议因素:
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,5);
$fh = fopen($file_save,'w');
curl_setopt($ch,CURLOPT_FILE,$fh);
$res = curl_exec($ch);
curl_close($ch);
return $res;
针对连接协议因素,我们可以在代码中更改连接协议来实现加速。在默认情况下,curl会使用HTTP/1.1协议来进行通信,但是这个协议在一些情况下会导致下载速度变慢。因此,我们可以在代码中更改为较新的HTTP/2协议来提升下载速度。
curl_setopt($hand,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_2TLS);
这样在请求过程中,curl将会采用较新的HTTP/2协议来进行通信,从而提升下载速度。
3、链接超时因素:
$fp=fopen($to_go,'w+');
curl_setopt($ch,$fp);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,120);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
针对链接超时因素,我们可以在代码中设置超时时间来缩短下载时间。我们可以对curl的连接设置进行调整,使curl请求的超时时间缩短,快速请求数据。
经过以上三方面的优化,我们可以大幅度提升七牛云存储下通过curl PHP下载文件的速度,节约时间,提升效率。
参考文献:
https://api.qiniu.com/v6/manual/api/region-datacenters/