直接用curl下载远程文件

时间:2011-02-10 12:53:02

标签: php file curl download

我想下载一个带有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;
?>

这种直接远程下载也可以用卷曲吗?

2 个答案:

答案 0 :(得分:5)

您需要以块的形式读取和输出文件,因为整个200MB文件可能不适合您的PHP脚本内存。

有关如何在curl中执行此操作,请参阅this questionthe manual中有一个实例。被盗和修改后,这样的事情应该有效(未经测试):

<?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!

答案 1 :(得分:0)

如果不在服务器上缓存文件,则无法从服务器提供该文件。

没有技术解决方案,也没有CURL,因为您无法访问对方服务器的DNS服务器,以隐藏相反的URL。