php代理远程文件下载
我愿意“代理”位于远程服务器(我们称之为服务器B)上的文件,并强制将其从服务器a下载给访问者 只有服务器A可以访问服务器B上的ressource(IP地址受保护)。ressource的重量可达几GB 以下是我目前的代码:php代理远程文件下载,php,nginx,proxy,Php,Nginx,Proxy,我愿意“代理”位于远程服务器(我们称之为服务器B)上的文件,并强制将其从服务器a下载给访问者 只有服务器A可以访问服务器B上的ressource(IP地址受保护)。ressource的重量可达几GB 以下是我目前的代码: header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.$filename); header('Content-Transfer-
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:
- 访问者在下载ressource时无法浏览服务器A上的任何网站页面。为什么?
- 它不支持暂停或恢复下载。显然,我可以使用“范围”标题来解决它。我还没有尝试,因为“问题1”是一个大问题,我想先解决它,然后再朝这个方向进一步
- 我不希望ressource在提供给访问者之前完全下载到服务器A的磁盘上,我希望它直接“转发”给访问者(也称为“代理”)
- 我读过关于readfile()和file_get_content()的帖子,我试过,同样的问题。甚至没有提到这些功能对服务器A(CPU、内存)造成了多大的压力,尤其是对于大文件
- 难道没有更有效的方法吗?我的意思是没有PHP,而是通过Apache或Nginx李>