没有fopen()的大文件下载?

时间:2012-03-06 20:40:26

标签: php curl

我的提供商不允许使用fopen()。所以我使用curl而不是这个来下载文件。但这仅适用于较小的文件(<100mb),因为服务器时间和内存限制。 我需要下载大文件(1gb)。

还有其他方法可以下载大文件吗?

这是我的代码:

$file = $_GET['dateiUrl'];

//set header
header("Cache-Control: public");
header("Content-Description: File Transfer");
header('Content-Type: application/force-download');
header("Content-Transfer-Encoding: binary");
header("Content-Disposition: attachment; filename=" . basename($file));
//curl part


set_time_limit(0);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_URL, $file);   
$data = curl_exec($ch);
curl_close($ch);

//output  
echo $data;

2 个答案:

答案 0 :(得分:3)

您可以将大文件切成较小的块。

查看“Content-Range:”标题和HTTP response 206(“部分内容”)。

当然,如果将文件切成块,则需要将它们重新组合在一起。但是有很多方法可以做到这一点,而且它们都不应该占用服务器资源。看看你是否可以在不使用fopen()的情况下完成它将会很有趣。 : - )

另请参阅:Difference between Content-Range and Range headers?

答案 1 :(得分:1)

您可能会发现CURLOPT_RESUME_FROMCURLOPT_RANGE对于使用部分下载的数据重试下载非常有用。

相关问题