- Как увеличить максимальную переменную POST в PHP?
- Установка лимитов PHP на обработку данных из форм
- Описание директив
- post_max_size
- Пример в htaccess:
- upload_max_filesize
- Пример:
- max_input_vars
- Пример:
- max_execution_time
- Пример:
- max_input_time
- Пример:
- memory_limit
- Пример:
- Установка директив в .htaccess
- Установка директив в PHP-скрипте
- Получение значений в PHP-скрипте
- Получение значения upload_max_filesize в PHP:
- Результат:
- Возможные ошибки
- Ограничение на количество POST переменных
- Как увеличить максимальную переменную POST в PHP?
- 5 ответов
Как увеличить максимальную переменную POST в PHP?
Я использую WAMP на своей локальной машине, когда отправляется FORM (method = «POST») с 2000 полями ввода. Я могу читать только 1001 _POST. т.е. с отладчиком Netbeans я могу ясно видеть, что размер _POST всегда 1001, если в форме больше 1001 полей ввода.
Я использовал этот java-код http://ideone.com/GAw14 для создания формы с N поля ввода и тестирования.
То же самое отлично работает на другой машине (WAMP), где я могу видеть все переменные POST.
Пожалуйста, помогите мне решить мою проблему.
В PHP 5.3.9 представлен параметр конфигурации max_input_vars , значение которого по умолчанию равно 1000. Ознакомьтесь с разделом Runtime Configuration руководства PHP. Значение по умолчанию и журнал изменений находятся в верхней части страницы.
Значение можно изменить, обновив php.ini сервера, добавив файл .htaccess или добавив строку в httpd.conf .
Если вы используете Suhosin с Hardened PHP, вы можете получить максимальный предел переменных, который он налагает. В php.ini вы можете просто добавить
[suhosin] suhosin.request.max_vars = 1000 suhosin.post.max_vars = 1000
меняя 1000 на все, что вам нужно, и перезагрузите веб-сервер.
Я столкнулся с этим на странице Drupal Permissions, когда было установлено много модулей с большим количеством ролей, что привело к тонне флажков. Это только спасло бы определенное количество из них, прежде чем что-то после этого просто проигнорировалось.
Похоже, что это, вероятно, не ваша проблема, но, поскольку довольно вероятно, что кто-то в будущем может наткнуться на это при поиске чего-то связанного, я пойду вперед и брошу это, поскольку мне потребовались годы, чтобы понять, когда я был в тупике ,
Я решил свои $ _POST max input -problem, добавив следующее в php.ini:
max_input_vars = 5000 suhosin.request.max_vars = 5000 suhosin.post.max_vars = 5000
Обратите внимание также на suhosin.request.max_vars.
Я решил эту проблему. Откройте файл конфигурации PHP.INI и добавьте эти строки
Я подозреваю, что проблема связана с количеством данных, поступающих с вашим запросом POST. Нет установки, которая ограничивает количество $ _POST vars, которое может быть установлено. Однако для данных POST существует ограничение на память, которое по умолчанию составляет 8 МБ.
В файле php.ini попробуйте изменить значение post_max_size и установите его на более высокое значение. Не забудьте перезапустить apache после внесения изменений.
Установка лимитов PHP на обработку данных из форм
Перечень настроек PHP, которые могут ограничить отправку форм и файлов через POST-запрос.
Описание директив
post_max_size
Устанавливает максимальный размер данных, отправленных методом POST, включая размер загружаемых файлов, по умолчанию 8Mb .
- Для загрузки больших файлов это значение должно быть больше значения upload_max_filesize.
- Значение можно указать числом в байтах, K (в килобайтах), M (в мегабайтах) и G (в гигабайтах).
- Значение «0» снимает ограничение только в версиях PHP 5.3.2 и 5.2.12.
Пример в htaccess:
php_value post_max_size 100M
upload_max_filesize
Максимальный размер загружаемых файлов на сервер. По умолчанию 2Mb.
Пример:
php_value upload_max_filesize 100M
max_input_vars
Максимальное количество переменных, которое может быть принято в одном запросе. По умолчанию 1000.
Если данный лимит будет превышен, то после отправки формы массив $_GET или $_POST будет пустым.
Пример:
php_value max_input_vars 2000
max_execution_time
Директива задаёт максимальное время в секундах, в течение которого скрипт должен полностью загрузиться. Если этого не происходит, работа скрипта завершается. По умолчанию на загрузку даётся 30 секунд.
Значение «0» снимает ограничение на время выполнения.
Пример:
php_value max_execution_time 600
Также, максимальное время выполнения скрипта задает функция set_time_limit($seconds) .
max_input_time
Задаёт максимальное время в секундах, в течение которого скрипт должен разобрать все входные POST или GET данные. Это время измеряется от момента, когда PHP вызван на сервере до момента, когда скрипт начинает выполняться.
- Значение по умолчанию «-1» – будет использоваться max_execution_time.
- Значение «0» – без ограничений по времени.
Пример:
php_value max_input_time 600
memory_limit
Задаёт максимальный объем памяти в байтах, который разрешается использовать скрипту. По умолчанию 128Mb.
Пример:
php_value memory_limit 200M
Установка директив в .htaccess
# Максимальный размер данных php_value post_max_size 110M # Максимальный размер файлов php_value upload_max_filesize 100M # Максимальное количество переменных php_value max_input_vars 2000 # Максимальное время выполнения скрипта php_value max_execution_time 600 # Максимальное время обработки данных php_value max_input_time 600 # Память для скрипта php_value memory_limit 200M
Установка директив в PHP-скрипте
ini_set('post_max_size', '110M'); // Максимальный размер данных ini_set('upload_max_filesize', '100M'); // Максимальный размер файлов ini_set('max_input_vars', '2000'); // Максимальное количество переменных ini_set('max_execution_time', '600'); // Максимальное время выполнения скрипта ini_set('max_input_time', '600'); // Максимальное время обработки данных ini_set('memory_limit', '200M'); // Память для скрипта
Получение значений в PHP-скрипте
Действующие значения настроек PHP можно посмотреть с помощью функции phpinfo() или получить значение параметра настройки с помощью функции ini_get($option) .
Получение значения upload_max_filesize в PHP:
'; echo 'Максимальный размер файлов: ' . ini_get('upload_max_filesize') . '
'; echo 'Максимальное количество переменных: ' . ini_get('max_input_vars') . '
'; echo 'Максимальное время выполнения скрипта: ' . ini_get('max_execution_time') . '
'; echo 'Максимальное время обработки данных: ' . ini_get('max_input_time') . '
'; echo 'Память для скрипта: ' . ini_get('memory_limit') . '
';
Результат:
Максимальный размер данных: 128M Максимальный размер файлов: 128M Максимальное количество переменных: 10000 Максимальное время выполнения скрипта: 300 Максимальное время обработки данных: -1 Память для скрипта: 1024M
Возможные ошибки
После отправки формы с множеством полей, массив $_POST пустой.
– В форме количество полей превышает значение max_input_vars.
Ошибка «Fatal error: Allowed memory size»
– Скрипт превысил значение параметра PHP memory_limit.
Ошибка «504 Gateway Time Out»
– Скрипт выполняется слишком долго, нужно увеличить значение max_execution_time. Как правило после вывода этой ошибки в браузере, скрипт будет еще какое-то время работать.
Ограничение на количество POST переменных
Проблема в следующем: попался вредный хостер — не позволяет отправить методом POST в одном запросе более 355 переменных (это не ограничение на объем передаваемых данных — post_max_size) — не могу найти что это за ограничение и вообще настройка ли это php или apache. Может кто сталкивался? Подскажите как обойти.
На серваке:
— PHP Version 5.2.14
— System Linux
— Apache 2.0
Добавлено через 15 часов 6 минут
Все всем спасибо, проблема решилась — хостер отключил ModSecurity — кому интересно что это: http://www.modsecurity.org
Передача переменных (get/post/.)
Привет. В общем вот кусочек кода, имеется input text с именем "name" значение которого нужно.
Сравнение переменных POST со значениями из БД
Здравствуйте уважаемые, сразу к сути вопросу. Есть определенный скрипт, который сравнивает значение.
Фильтрация не известных post переменных
Есть скрипт который рандомно генерирует окончание у name и info. Этот скрипт трогать нельзя.
Извлечение переменных. Метод POST
Суть:есть памятник и нужно выбрать в каком городе он находится. Вот html: <!DOCTYPE html>.
Присвоение переменных каждому значению в массиве POST
Доброго времени суток! Передаю через аякс на обработчик множество разных переменных и значений.
Передача переменных post и не только из стандартных форм html
Скажите пожалуйста, можно ли передать переменные в файл php не только средствами html, мне нужно по.
Есть ли ограничение на количество переменных в программе
вопрос вот в чем я столкнулся с проблемой что программа стала подвисать когда я добавляю очередные.
Ограничение 100Kb на метод Post
При отправке данных методом Post существует ограничение в 100 кб, можно ли его как-нибудь увеличить.
Как увеличить максимальную переменную POST в PHP?
Я использую WAMP на своей локальной машине, когда отправляется FORM (method = «POST» ) с 2000 полями ввода. Я могу читать только 1001 _POST. i. С отладчиком Netbeans я могу ясно видеть, что размер _POST всегда 1001, если в форме больше 1001 полей ввода. Я использовал этот http://ideone.com/GAw14 java-код для создания формы с N поля ввода и тестирования. То же самое работает на другой машине (WAMP), где я могу видеть все переменные POST. Пожалуйста, помогите мне решить мою проблему.
Почему бы не взять php.ini с другого компьютера, сравнить его с вашим текущим компьютером и посмотреть, что следует поместить в переменные post_max_size т. Д.?
@Lenny Ленни, возможно, однако, я думаю, что переменная post_max_size влияет на это и увеличивает, что должно решить проблему. Поскольку он работает с другой установкой, как указано в OP, есть вероятность, что новая установка имеет меньший набор post_max_size и это просто необходимо увеличить.
Веб-браузер никогда не удаляет записи. В последних версиях PHP было изменено значение max_input_vars security.stackexchange.com/questions/10646/…, чтобы оно могло повлиять на вас. Проверьте, действительно ли вам нужно 2000 переменных (многие брандмауэры также выполняют такую фильтрацию, чтобы ваш код не был переносимым)
post_max_size = 81M на рабочей машине, я изменил это значение и перезапустил wamp, проблема все еще существует. Я не пользуюсь Suhosin, установил WAMP и все. Я пытался использовать Chrome и Firefox. Нет разницы.
@Brad F Jacobs Полезно знать, потому что я думаю, что столкнулся с этой проблемой еще в то время, и хотя это был веб-браузер 🙂
5 ответов
В PHP 5.3.9 представлен параметр конфигурации max_input_vars , значение которого по умолчанию равно 1000. Ознакомьтесь с Конфигурация времени выполнения раздела руководство по PHP. Значение по умолчанию и журнал изменений находятся в верхней части страницы.
Значение можно изменить, обновив сервер php.ini, добавив файл .htaccess или добавив строку в httpd.conf.
Кредит идет на коллегу, у которого была эта проблема только вчера, а затем было достаточно приятно поделиться своими выводами с командой 🙂
Для кого-то, кто ищет в будущем, я обнаружил, что сервер cPanel по умолчанию на 2013-03-15 ограничил количество входных переменных до 512. Некоторые из наших сценариев прошли значительно больше, и добавление max_input_vars в php.ini устранило проблему.
Если вы используете Suhosin с закаленным PHP, вы можете получить максимальный предел переменных, который он налагает. В php.ini вы можете просто добавить
[suhosin] suhosin.request.max_vars = 1000 suhosin.post.max_vars = 1000
сменив 1000 на все, что вам нужно, и перезапустите веб-сервер.
Я столкнулся с этим на странице разрешений Drupal, когда было установлено много модулей с большим количеством ролей, что привело к тонне флажков. Он сохранил бы определенное количество из них до того, как что-то после этого просто проигнорировалось.
Похоже, что это, вероятно, не ваша проблема, но поскольку это довольно вероятно, что кто-то в будущем может наткнуться на это при поиске чего-то связанного, я пойду вперед и брошу это, поскольку мне потребовались возрасты, чтобы понять, когда Я был в тупике.