Загрузка большого файла без fopen ()? - PullRequest
0 голосов
/ 07 марта 2012

мой провайдер не разрешает fopen (). Поэтому я использовал curl вместо этого для загрузки файлов. Но это работает только для небольших файлов (<100 МБ) из-за тайм-аута сервера и ограничений памяти. И мне нужно скачать большие файлы (1 ГБ). </p>

Есть ли другой способ загрузки больших файлов?

Вот мой код:

$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 ]

3 голосов
/ 07 марта 2012

Вы можете разделить большой файл на более мелкие куски.

Извлеките заголовок " Content-Range: " и HTTP-ответ 206 (")Частичное содержимое ").

Конечно, если вы нарезаете файл на куски, вам нужно что-то, чтобы собрать их снова вместе.Но есть много способов сделать это, и ни один из них не должен занимать слишком много ресурсов сервера.Будет интересно посмотреть, сможете ли вы сделать это без использования fopen ().: -)

См. Также: Разница между заголовками Content-Range и Range?

1 голос
/ 07 марта 2012

Вы можете найти CURLOPT_RESUME_FROM или CURLOPT_RANGE полезными для повторной загрузки с частично загруженными данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...