Принудительная загрузка больших файлов на общий сервер - PullRequest
0 голосов
/ 07 сентября 2011

Я пытаюсь добавить ссылку на скачивание большого видеофайла (около 300 МБ) на чьем-то сайте, но, к сожалению, они на общем хостинге (я сказал им, что им придется обновиться, если их загрузят многие) , Я не хочу, чтобы людям приходилось «Сохранить объект как», и я обычно использую этот код для принудительной загрузки:

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // some day in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename={$file}");
header("Content-Transfer-Encoding: binary");
readfile($file);

Это прекрасно работает с небольшими файлами, но не с большими, и даже после включения ошибок я не получаю ошибок и нет журнала ошибок. Я уверен, что это связано с ограничением общей памяти (или, возможно, тайм-аут), но кто-нибудь знает, как я заставляю скачивать большие файлы на общих серверах, в идеале без JavaScript, так как я уверен, что не смогу установить лимиты памяти достаточно высокими?

Большое спасибо,

Dave

1 Ответ

0 голосов
/ 07 сентября 2011

Обычное решение состоит в том, чтобы сделать вывод файла самостоятельно и позволить собственным буферам веб-сервера обрабатывать вещи:

$fh = fopen($file, 'rb') or die("Unable to open $file");
while($data = fread($fh, 10240)) { // 10kbyte chunks.
   echo $data;
}
fclose($fh);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...