- Решение проблемы с обрезанными массивами в PHP 5
- Установка лимитов 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:
- Результат:
- Возможные ошибки
- Решение проблемы с обрезанными массивами в PHP 5
- Космонавт в лодке
- Личный блог Олега Абражаева о программировании, технологиях и о жизни
- Язык
- Рубрики
- Облако меток
- Свежие комментарии
- livelib.ru
- Подписаться на обновления!
- Большой размер POST запроса в PHP
Решение проблемы с обрезанными массивами в PHP 5
Хотел сегодня написать небольшую статью о 2х параметрах которые появились в PHP, это post_max_size и post_max_vars.
post_max_size
Устанавливает максимально допустимый размер данных, отправляемых методом POST. Этот параметр влияет на вес передаваемых данных методом POST, так же важно учитывать его при реализации загрузки файлов через скрипты. По умолчанию данный параметр стоит 8Мб.
post_max_vars
Если про post_max_size все хорошо описано в мануале и он есть по умолчанию в конфигурации php, то про параметр post_max_vars глухая тишина. Так что же это такой за параметр. Post_max_vars указывает интерпретатору сколько будет обрабатываться строк в POST запросе, ограничение стоит по умолчанию 200 строк.
Для крупных проектов, особенно реализованных на таких тяжеловесах как Битрикс это довольно мало.
Поэтому, если вы столкнулись с проблемой, когда при сохранении данных вы получается обрезанный POST массив или массив в котором только часть передаваемых строк, значит вам нужно не искать ошибку в вашем скрипте, а менять параметры на сервере. Если такой возможности нет, значит надо переделывать скрипт так, что бы он не превышал лимитов.
Меняем значения post_max_size и post_max_vars
Если у вас в .htaccess разрешено переобъявление php параметров, то можно указать их там, например так:
php_value post_max_size 128M
php_value post_max_vars 800
Либо поменять в php.ini. Параметр post_max_size уже там указан, и достаточно найти его поиском и поменять, тогда как post_max_vars придется дописать, например под post_max_size.
Установка лимитов 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. Как правило после вывода этой ошибки в браузере, скрипт будет еще какое-то время работать.
Решение проблемы с обрезанными массивами в PHP 5
Хотел сегодня написать небольшую статью о 2х параметрах которые появились в PHP, это post_max_size и post_max_vars.
post_max_size
Устанавливает максимально допустимый размер данных, отправляемых методом POST. Этот параметр влияет на вес передаваемых данных методом POST, так же важно учитывать его при реализации загрузки файлов через скрипты. По умолчанию данный параметр стоит 8Мб.
post_max_vars
Если про post_max_size все хорошо описано в мануале и он есть по умолчанию в конфигурации php, то про параметр post_max_vars глухая тишина. Так что же это такой за параметр. Post_max_vars указывает интерпретатору сколько будет обрабатываться строк в POST запросе, ограничение стоит по умолчанию 200 строк.
Для крупных проектов, особенно реализованных на таких тяжеловесах как Битрикс это довольно мало.
Поэтому, если вы столкнулись с проблемой, когда при сохранении данных вы получается обрезанный POST массив или массив в котором только часть передаваемых строк, значит вам нужно не искать ошибку в вашем скрипте, а менять параметры на сервере. Если такой возможности нет, значит надо переделывать скрипт так, что бы он не превышал лимитов.
Меняем значения post_max_size и post_max_vars
Если у вас в .htaccess разрешено переобъявление php параметров, то можно указать их там, например так:
php_value post_max_size 128M
php_value post_max_vars 800
Либо поменять в php.ini. Параметр post_max_size уже там указан, и достаточно найти его поиском и поменять, тогда как post_max_vars придется дописать, например под post_max_size.
Космонавт в лодке
Личный блог Олега Абражаева о программировании, технологиях и о жизни
Язык
Рубрики
- HTML и CSS (7)
- Java (2)
- JavaScript (5)
- Linux (45)
- Debian (4)
- Ubuntu (24)
- Doctrine (7)
- Kohana Framework (7)
- Symfony Framework 2 (3)
- WordPress CMS (4)
- Zend Framework 2 (8)
- Redmine (2)
Облако меток
Свежие комментарии
- PHP: include или все в один файл? — include php быстродействие — Вопросы и ответы по программированию к записи Сравнение производительности автозагрузки и объединения классов в один файл
- Новичёк к записи Satis: создание вашего собственного Composer репозитория
- Самарка к записи Что делать с ошибкой W: Possible missing firmware /lib/firmware/rtl_nic/rtl8105e-1.fw for module r8169
- Saskozp к записи Фикс Bootstrap 3 Navigation dropdown submenu и реализация в Zend Framework 2 и Smarty
- seoonly.ru к записи Список полезных команд для Linux (Ubuntu, Debian) – ОБНОВЛЯЕМЫЙ
livelib.ru
Подписаться на обновления!
Большой размер POST запроса в PHP
Иногда проект вырастает в нечто большее. Первоначальные POST запросы вырастают в размере, а времени менять архитектуру нет. Вот как можно увеличить размер.
В первую очередь настройки php.ini. (если апач /etc/php5/apache2/php.ini или если fpm /etc/php5/fpm/php.ini)
post_max_size равный или больше предполагаемому размеру post.
upload_max_filesize – для загрузки файлов побольше. обычно равный post.
max_execution_time и max_input_time побольше, чтобы скрипт не отвалился на долгой загрузке.Документация php.ini – http://www.php.net/manual/ru/ini.list.php
Так же сразу отключить, если установлено расширение php – suhosin. Найти можно по suhosin.so, suhosin.ini.
Его можно и не отключать, а настроить в suhosin.ini параметры:
suhosin.post.max_value_length
suhosin.request.max_value_lengthДокументация suhosin – http://www.hardened-php.net/suhosin/configuration.html
Если используется nginx, то в файле /etc/nginx/nginx.conf:
client_max_body_size больше предполагаемого post.Так же
send_timeout и fastcgi_read_timeout побольше, иначе будет 504 ошибка.Документация nginx – http://nginx.org/ru/
Если используется apache2, то в /etc/apache2/apache.conf:
LimitRequestFieldsize – размер поля
LimitRequestBody – размер всего запроса