Загрузка не работает правильно, когда файл слишком большой

У меня есть приложение PHP, где я могу загружать файлы. Когда я загружаю большинство файлов и делаю print_r($_FILES)Я получаю что-то вроде этого:

Array
(
    [import] => Array
        (
            [name] => Array
                (
                    [excel_file] => COD MKTG 2.csv
                )

            [type] => Array
                (
                    [excel_file] => application/vnd.ms-excel
                )

            [tmp_name] => Array
                (
                    [excel_file] => /tmp/phpy8mEKn
                )

            [error] => Array
                (
                    [excel_file] => 0
                )

            [size] => Array
                (
                    [excel_file] => 1584286
                )

        )

)

У меня есть другой файл CSV, который больше похож на 13 мегабайт, и когда я пытаюсь загрузить его, я получаю это:

Array
(
    [import] => Array
        (
            [name] => Array
                (
                    [excel_file] => COD MKTG.csv
                )

            [type] => Array
                (
                    [excel_file] => 
                )

            [tmp_name] => Array
                (
                    [excel_file] => 
                )

            [error] => Array
                (
                    [excel_file] => 1
                )

            [size] => Array
                (
                    [excel_file] => 0
                )

        )

)

Я не получаю никакой ошибки, говоря, что файл слишком большой. Я просто получаю урод $_FILES, я имею post_max_size в php.ini установлено значение 100 МБ. Почему это происходит?

4 ответа

Решение

Согласно документации PHP, код ошибки 1 - UPLOAD_ERR_INI_SIZE: "Загруженный файл превышает директиву upload_max_filesize в php.ini"

Вы должны убедиться, что все следующие переменные установлены правильно:

upload_max_filesize - максимальный размер любого отдельного файла в загрузке
max_file_uploads - общее количество файлов, которые могут быть загружены
post_max_size - общая сумма всех данных, которые были отправлены (данные формы + файлы)
memory_limit - должен быть> post_max_size, чтобы оставить место для PHP + накладные расходы скрипта

И, кроме того, есть ограничения веб-сервера. В Apache есть LimitRequestBody, который будет применяться задолго до того, как PHP появится на картинке.

Изменить ограничение памяти aswell memory_limit = 8M;

до 20?

и, возможно, время выполнения

max_execution_time

редактировать:

удостоверьтесь, что это не время выполнения, посмотрите это...

если у вас очень медленное подключение к интернету, это может быть

max_input_time

это должен быть один из них, или что-то не так с вашим сценарием, или вы неправильно настроили параметры

memory_limit

max_execution_time

max_input_time

Вы также можете попробовать установить эти значения в файле.htaccess в вашем корневом каталоге.

php_value upload_max_filesize 128M
php_value post_max_size 128M
php_value max_execution_time 200
php_value max_input_time 200

Насколько я знаю, у PHP есть проблемы с большими файлами, когда дело доходит до функций файловой системы. 32-битный скомпилированный PHP имеет 2147483647 как PHP_INT_MAX, что означает, что файлы размером больше ~2G не будут открываться, искать и т. Д. Это число больше в 64-битном скомпилированном PHP [около 4+ триллионов байт - 8-байтовое целое число со знаком, то есть],

В этот самый момент я пытаюсь решить эту проблему [я пытаюсь интегрировать JumpLoader в мой проект CMS. Это сделано, за исключением части, связанной с этой проблемой 2G - не может работать с файлами больше 2G.], Поэтому, как только я получу решение по этому вопросу, поделюсь им.

Удачи на данный момент.

Другие вопросы по тегам