Правильная загрузка больших файлов, PHP

83
22 января 2021, 01:10

Всем привет. Задался вопросом, как правильно отдавать пользователю на загрузку большой файл? Использую Laravel, при стандартном подходе response()->download() весь файл грузится в память. Как быть с большими файлами? Какой принцип их загрузки? Рад любому пояснению.

Answer 1

Вариант 1 - сделайте отдачу файлов в обход laravel (простой cdn-сайт создайте, который будет отдавать ваши файлы)

Сделайте вместе Response::download() свой метод:

function sendFile($path, $name = null, array $headers = array())
{
    if (is_null($name)) $name = basename($path);
    $headers = array_merge(array(
        'Content-Description'       => 'File Transfer',
        'Content-Type'              => File::mime(File::extension($path)),
        'Content-Transfer-Encoding' => 'binary',
        'Expires'                   => 0,
        'Cache-Control'             => 'must-revalidate, post-check=0, pre-check=0',
        'Pragma'                    => 'public',
        'Content-Length'            => File::size($path),
    ), $headers);
    $response = new Response('', 200, $headers);
    $response->header('Content-Disposition', $response->disposition($name));
    if (Config::get('session.driver') !== '')
    {
        Session::save();
    }
    ob_end_clean();
    $response->send_headers();
    if ($fp = fread($path, 'rb')) {
        while(!feof($fp) and (connection_status()==0)) {
            print(fread($fp, 8192));
            flush();
        }
    }
    Event::fire('laravel.done', array($response));
    $response->foundation->finish();
    exit;
}

Взято из первой ссылки по результату поиска в Гугл

Или вот это почитайте

А если не хватит - поищите тут

READ ALSO
Использование нескольких @OneToOne аннотаций Hibernate

Использование нескольких @OneToOne аннотаций Hibernate

У меня есть 3 сущности: Customer, User и VerificationEmail

87
java Spring сервер не получает POST и PUT запросы из android

java Spring сервер не получает POST и PUT запросы из android

У меня есть простой север на Spring`е, что должен обрабатывать GET, PUT и POST запросы, и работать с БД соответственноС GET никаких проблем нет, и приложение...

104
Пробел в первой ячейке Excel (CSV)

Пробел в первой ячейке Excel (CSV)

При генерации csv файла и последующем его открытии в excel получаю ошибкуРешить ее удалось добавив в первую ячейку первым символом пробел

100
Что такое buckets или бакет?

Что такое buckets или бакет?

Смотрю картинку про хэш‑таблицу и вижу такое слово: bucketsПосоветуйте что это такое и для чего?

99