[英]Download remote file with curl directly
我想下载一个带有curl的远程文件,并立即将其输出给用户。 用户应该认为他从我的服务器而不是远程服务器下载文件。 我无法缓冲整个文件,因为有些文件大于200 MB。 此外,用户必须等待完成缓冲,直到他可以开始下载文件。
我找到了一个直接从远程服务器下载文件的脚本:
<?php
$file_name = $_GET['file'];
$file_url = 'http://www.remote.tld/' . $file_name;
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"".$file_name."\"");
readfile($file_url);
exit;
?>
这种直接远程下载也可以卷曲吗?
您需要以块的形式读取和输出文件,因为整个200MB文件可能不适合您的PHP脚本的内存。
有关如何在curl中执行此操作,请参阅此问题 。 手册中有一个实例。 被盗和修改,这样的东西应该工作(未经测试):
<?php
curl_setopt($this->curl_handle, CURLOPT_WRITEFUNCTION, "receiveResponse");
function receiveResponse($curlHandle,$data)
{
echo $data; // Ouput to the user
$length = strlen($data);
return $length;
}
?>
请注意,这不是一个好主意。 它给服务器带来了相对沉重的负担 - 如果你有相当高的流量数量,那么为代表下载服务的虚荣心付出的代价是很高的。 当然,200 MB下载将为您的流量账单创建400MB!
如果不在服务器上缓冲文件,则无法从服务器提供该文件。
没有技术解决方案,也没有CURL,因为您无法访问对方服务器的DNS服务器,以隐藏相反的URL。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.