我的提供商不允许使用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;
答案 0 :(得分:3)
您可以将大文件切成较小的块。
查看“Content-Range:”标题和HTTP response 206(“部分内容”)。
当然,如果将文件切成块,则需要将它们重新组合在一起。但是有很多方法可以做到这一点,而且它们都不应该占用服务器资源。看看你是否可以在不使用fopen()的情况下完成它将会很有趣。 : - )
答案 1 :(得分:1)
您可能会发现CURLOPT_RESUME_FROM
或CURLOPT_RANGE
对于使用部分下载的数据重试下载非常有用。