Загрузка не работает правильно, когда файл слишком большой - PullRequest
5 голосов
/ 28 октября 2010

У меня есть приложение 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 ]

13 голосов
/ 28 октября 2010

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

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

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

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

1 голос
/ 28 октября 2010

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

на возможно 20?

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

max_execution_time

edit:

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

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

max_input_time

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

memory_limit

max_execution_time

max_input_time

0 голосов
/ 13 ноября 2010

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

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

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

0 голосов
/ 28 октября 2010

Вы также можете попробовать установить эти значения в файле .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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...