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