PHP post_max_size переопределяет upload_max_filesize

#php #upload #filesize

#php #загрузка #размер файла

Вопрос:

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

  • post_max_size = 8 МБ
  • upload_max_filesize = 16 МБ

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

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

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

Саймон

Ответ №1:

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

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

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

Ответ №2:

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

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

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

Ответ №3:

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

Ответ №4:

post_max_size:

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

Ответ №5:

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

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

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

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

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

Ответ №6:

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

Комментарии:

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