Я использую этот код ниже для потоковой передачи фильма на моем локальном хосте. Фильм, размер которого меньше 2 ГБ, работает нормально, но когда речь идет о фильме объемом более 2 ГБ, фильм не воспроизводится.
Пожалуйста, помогите мне, что я должен сделать, чтобы прочитать файлы большего размера.
Это код, который я использую для потокового фильма
<?php
//Determine file path according to extension
if (!isset($_GET['ext']) || $_GET['ext'] == 'mp4') {
$path ='movies/'.$_GET['movie'];
}
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime = $finfo->file($path);
header('Content-Type: ' . $mime);
$size = filesize($path);
if (isset($_SERVER['HTTP_RANGE'])) {
list($specifier, $value) = explode('=', $_SERVER['HTTP_RANGE']);
if ($specifier != 'bytes') {
header('HTTP/1.1 400 Bad Request');
return;
}
list($from, $to) = explode('-', $value);
if (!$to) {
$to = $size - 1;
}
$fp = fopen($path, 'rb');
if (!$fp) {
header('HTTP/1.1 500 Internal Server Error');
return;
}
header('HTTP/1.1 206 Partial Content');
header('Accept-Ranges: bytes');
header('Content-Length: ' . ($to - $from));
header("Content-Range: bytes {$from}-{$to}/{$size}");
fseek($fp, $from);
while(true){
if(ftell($fp) >= $to){
break;
}
echo fread($fp, 8192);
// Flush do buffer
ob_flush();
flush();
}
}
else {
header('Content-Length: ' . $size);
readfile($path);
}
Я разместил файлы на локальном хосте, используя xammpp в качестве сервера.
Это может иметь разные причины.
fopen () читает файл в вашу оперативную память. Таким образом, ограничение, похоже, исходит оттуда.
Во-первых, убедитесь, что в вашей системе установлено минимум 4 ГБ.
Если вам нужно больше, также убедитесь, что вы не используете 32-битную систему Win, поскольку она поддерживает только до 4 ГБ оперативной памяти.
Тогда вы можете попытаться увеличить memory_limit
PHP. Откройте файл xampp / php / php.ini и измените memory_limit
что вам нужно, ИЛИ установите значение INI непосредственно в вашем PHP-файле, как это
ini_set(”memory_limit”,”16M”);
Надеюсь это поможет. Для более конкретного ответа было бы полезно, если у вас есть сообщение об ошибке.
Других решений пока нет …