Как заставить браузер загружать ОГРОМНЫЙ файл mp4 вместо его воспроизведения - PullRequest
0 голосов
/ 23 сентября 2019

Хорошо, я знаю, это звучит как дубликат, но это не так.есть много вопросов и ответов о загрузке файла mp4 вместо его воспроизведения в браузере.

моя проблема в том, что у меня mp4 имеет размер 1 ГБ, а на моем сервере 512 оперативной памяти и 1 процессор, поэтому эти методы не работают дляя.

Вот мой текущий код:

<?php
ini_set('memory_limit', '-1');
$file = $_GET['target'];
header ("Content-type: octet/stream");
header ("Content-disposition: attachment; filename=".$file.";");
header("Content-Length: ".filesize($file));
readfile($file);
exit;
?>

Есть ли способ сделать это на большом файле?

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Вы пытались загрузить файл порциями, например:

$chunk = 256 * 256; // you can play with this - I usually use 1024 * 1024;
$handle = fopen($file, 'rb');
while (!feof($handle))
{
    $data = fread($handle, $chunk);
    echo $data;
    ob_flush();
    flush();
}
fclose($handle);
0 голосов
/ 24 сентября 2019

Благодаря jibsteroos конечный рабочий код:

download.php:

<?php
$file = "videos\\" . $_GET['target'];
header ("Content-type: octet/stream");
header ("Content-disposition: attachment; filename=".$file.";");
header("Content-Length: ".filesize($file));
$chunk = 512* 512; 
$handle = fopen($file, 'rb');
while (!feof($handle))
{
    $data = fread($handle, $chunk);
    echo $data;
    ob_flush();
    flush();
}
fclose($handle);

?>

Пример использования:

www.example.com/download.php?target=huge_video.mp4

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