PHP post_max_size переопределяет upload_max_filesize - PullRequest
41 голосов
/ 13 октября 2011

На моем хосте сайта я видел (через phpinfo), что

  • post_max_size = 8Mb
  • upload_max_filesize = 16Mb

Это привело меня кдумаю, что я должен быть в состоянии загрузить файл размером до 16 МБ.Однако, когда я делаю это с помощью метода post (как обычно), post_max_size вступает во владение и объявляет, что я отправил слишком много.

Какой метод позволяет отправлять файл размером до 16 МБ?ПОЛУЧИТЬ - ПОСТАВИТЬ - другое?

Надеюсь, кто-нибудь сможет уточнить это для меня.

Саймон

Ответы [ 6 ]

78 голосов
/ 26 февраля 2013

upload_max_filesize - ограничение любого отдельного файла.post_max_size является пределом всего тела запроса, которое может включать несколько файлов.

С учетом post_max_size = 20M и upload_max_filesize = 6M вы можете загрузить до 3 файлов по 6M каждый.Если вместо post_max_size = 6M и upload_max_filesize = 20M, вы можете загрузить только один файл 6M, прежде чем нажать post_max_size.Это не помогает иметь upload_max_size> post_max_size.

Не очевидно, как распознать переход post_max_size.$_POST и $_FILES будут пустыми, но $_SERVER['CONTENT_LENGTH'] будет> 0. Если клиент только что не загружал переменные или файлы сообщений, тогда $_SERVER['CONTENT_LENGTH'] будет 0.

19 голосов
/ 13 октября 2011

Путем загрузки файла POST (обычно есть и другие методы).Посмотрите на атрибут метода формы, которая содержит поле загрузки файла;)

Самый низкий предел любого связанного параметра заменяет более высокий параметр:

См. Обработка загрузки файлов: Common Pitfals whichобъясняет это подробно и как рассчитать значения.

12 голосов
/ 13 октября 2011

Обычным методом отправки загрузки файла является POST, поэтому post_max_size должно быть 16 МБ или более.

Кстати, также memory_limit играет роль. Это должно быть больше, чем 16 МБ, но поскольку значение по умолчанию составляет 128 МБ, вы не увидите эту проблему. Пример конфигурации php.ini:

post_max_size = 16M
upload_max_filesize = 16M
memory_limit = 128M

Измените эти значения в php.ini, если у вас есть к ним доступ, в противном случае вы можете попытаться изменить их в файле .htaccess.

php_value upload_max_filesize 16M
php_value post_max_size 16M 

Это будет работать, только если настройки AllowOverride позволяют это. В противном случае вы должны обратиться в свою хостинговую компанию.

6 голосов
/ 22 декабря 2013

Настройки конфигурации вашего сервера позволяют пользователям загружать файлы размером до 16 МБ (потому что вы установили upload_max_filesize = 16 МБ), но post_max_size принимает данные постов только до 8 МБ. Вот почему выдает ошибку.

Цитируется с официального сайта PHP :

  1. Для загрузки больших файлов значение post_max_size должно быть больше, чем upload_max_filesize.

  2. memory_limit должен быть больше, чем post_max_size

Вы всегда должны устанавливать значение post_max_size больше значения upload_max_filesize.

5 голосов
/ 29 марта 2018

post_max_size:

  • Устанавливает максимально допустимый размер почтовых данных.Этот параметр также влияет на загрузку файлов
  • Для загрузки больших файлов это значение должно быть больше, чем upload_max_filesize
  • Вообще говоря, memory_limit должно быть больше, чем post_max_size.
  • PHPПо умолчанию: 8M

upload_max_filesize:

  • Максимальный размер загружаемого файла
  • PHP По умолчанию: 2M

memory_limit> post_max_size> upload_max_filesize

PHP По умолчанию: 128M> 8M> 2M

По умолчанию значение post_max_size должно быть 4 разабольше, чем upload_max_filesize.В свою очередь memory_limit должен быть в 16 раз больше, чем post_max_size

3 голосов
/ 29 ноября 2016

изменение php.ini max_input_vars 1000

...