php代理远程文件下载

时间:2016-08-24 02:30:16

标签: php nginx proxy

我愿意"代理"位于远程服务器上的文件(让我们称之为服务器B)并从服务器A强制下载到访问者。

只有服务器A可以访问服务器B上的资源(受保护的IP地址)。资源的重量可以达到几千兆字节。

到目前为止,这是我的代码:

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$filename);
header('Content-Transfer-Encoding: chunked'); 
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
$stream = fopen('php://output', 'w');
$ch = curl_init($ruri);
curl_setopt($ch, CURLOPT_READFUNCTION, function($ch, $fd, $length) use ($stream) {
    return fwrite($stream, fread($fd, $length));
});
curl_exec($ch);
curl_close($ch);

部分工作。

问题1:

  • 访问者在下载资源时无法浏览服务器A上任何网站的页面。为什么?

问题2:

  • 它不支持暂停或恢复下载。显然我可以使用" range"来解决它。头。我没有尝试,因为"问题编号1"这是一个很大的问题,我想在朝这个方向前进之前先解决它。

请注意:

  • 我不希望将资源完全下载到服务器A的磁盘上,然后再将其提供给访问者,我希望它能够被转发"直接访问者(又名"代理"?)
  • 我阅读了关于readfile()和file_get_content()的帖子,我试过,同样的问题。甚至没有提到这些功能有多少"压力"服务器A(CPU,内存),特别是大文件。
  • 有没有办法更有效地做到这一点?我的意思是没有PHP,而是通过Apache或Nginx?

0 个答案:

没有答案