Невозможно прочитать файлы размером более 2 ГБ - PullRequest
0 голосов
/ 27 сентября 2018

Я использую этот код ниже для потоковой передачи фильма на моем локальном хосте.Фильм, размер которого меньше 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 в качестве сервера.

1 Ответ

0 голосов
/ 27 сентября 2018

Это может иметь разные причины.

fopen () считывает файл в вашу оперативную память.Таким образом, кажется, отсюда и ограничение.

Сначала убедитесь, что в вашей системе установлено минимум 4 ГБ.Если вам нужно больше, также убедитесь, что вы не используете Win 32-битную систему, поскольку она поддерживает только до 4 ГБ оперативной памяти.

Тогда вы можете попытаться увеличить memory_limit PHP.Откройте файл xampp / php / php.ini и замените memory_limit на то, что вам нужно, ИЛИ установите значение ini прямо в вашем php-файле следующим образом:

ini_set(”memory_limit”,”16M”);

Надеюсь, этопомогает.Для более конкретного ответа было бы полезно, если у вас есть какое-либо сообщение об ошибке.

...