PHP Не удается загрузить файлы весом более 40 МБ - PullRequest
0 голосов
/ 07 апреля 2020

Я создал простой файл для загрузки файлов. У меня есть следующий код:

function DownloadFile($file) { // $file = include path
    if(file_exists($file)) {
        header('HTTP/1.0 200 OK', true, 200);
        header('Content-Description: File Transfer');
        header('Content-Type: application/zip');
        header('Content-Disposition: attachment; filename='.basename($file));
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');

        ob_clean();
        flush();
        readfile($file);
        exit;
    }
}

Проблема в том, что если я пытаюсь загрузить файлы размером более 40-50 МБ, файл загружается пустым (0 КБ), но если я пытаюсь загрузить файл размером менее 40 МБ, он работает отлично.

В чем проблема?

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

Решение:

function DownloadFile($file) { // $file = include path
    if(file_exists($file)) {
        header('HTTP/1.0 200 OK', true, 200);
        header('Content-Description: File Transfer');
        header('Content-Type: application/zip');
        header('Content-Disposition: attachment; filename='.basename($file));
        header('Content-Transfer-Encoding: chunked');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));

               ob_clean();
               flush();
               ob_end_flush();

            if ($fd = fopen ($file, "r")) {

                set_time_limit(0);
                ini_set('memory_limit', '1024M');

                while(!feof($fd)) {
                    echo fread($fd, 4096);
                    flush();
                }   

            }
    }
}
0 голосов
/ 10 апреля 2020

Как описано в этой статье https://www.sitepoint.com/community/t/php-file-size-download-limit/6541, вам нужно установить

memory_limit = 128M
post_max_size = 300M

в php .ini файле

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