繁体   English   中英

直接用curl下载远程文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM