假设一个场景:
当用户需要通过我们提供的下载服务,来下载一个较大的文件(200M-2G)时,我们服务端应该如何来满足这个服务呢?
且当我们的服务端是采用nginx+php的架构时,该如何解决呢。
作为服务端接口层,我们需要从数据层(可能是云存储,可能是类似于亚马逊S3的存储服务)下载较大文件(200M--2G),然后将下载得到的文件,返回给请求客户端。
且当我们的服务端接口层是采用nginx+php的架构时,该如何解决呢。
如下图所示:
最初的解决方法(但无法彻底解决):
很多同学最初的解决办法,可能会直接采用curl函数,得到返回内容之后,echo 这个返回内容,结束php程序,然后nginx收到php的echo结果,再返回给请求端。
如下图所示:
这段下载代码很简单,如下:
$ch = \curl_init($url);
\curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 获取数据返回
\curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); // 在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回
\curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArr);
\curl_setopt($ch, CURLOPT_HEADER, 1);