Перечень настроек PHP, которые могут ограничить отправку форм и файлов через POST-запрос.
post_max_size
Устанавливает максимальный размер данных, отправленных методом POST, включая размер загружаемых файлов, по умолчанию 8Mb.
- Для загрузки больших файлов это значение должно быть больше значения upload_max_filesize.
- Значение можно указать числом в байтах, K (в килобайтах), M (в мегабайтах) и G (в гигабайтах).
- Значение «0» снимает ограничение только в версиях PHP 5.3.2 и 5.2.12.
Пример в htaccess:
upload_max_filesize
Максимальный размер загружаемых файлов на сервер. По умолчанию 2Mb.
- post_max_size должен быть больше этого значения.
- Значение можно указать числом в байтах, K, M и G.
Пример:
max_input_vars
Максимальное количество переменных, которое может быть принято в одном запросе. По умолчанию 1000.
Если данный лимит будет превышен, то после отправки формы массив $_GET
или $_POST
будет пустым.
Пример:
max_execution_time
Директива задаёт максимальное время в секундах, в течение которого скрипт должен полностью загрузиться. Если этого не происходит, работа скрипта завершается. По умолчанию на загрузку даётся 30 секунд.
Значение «0» снимает ограничение на время выполнения.
Пример:
Также, максимальное время выполнения скрипта задает функция set_time_limit($seconds)
.
max_input_time
Задаёт максимальное время в секундах, в течение которого скрипт должен разобрать все входные POST или GET данные. Это время измеряется от момента, когда PHP вызван на сервере до момента, когда скрипт начинает выполняться.
- Значение по умолчанию «-1» – будет использоваться max_execution_time.
- Значение «0» – без ограничений по времени.
Пример:
memory_limit
Задаёт максимальный объем памяти в байтах, который разрешается использовать скрипту. По умолчанию 128Mb.
- memory_limit должен превышать post_max_size.
- Чтобы убрать ограничения, установите значение «-1».
Пример:
# Максимальный размер данных
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
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 можно посмотреть с помощью функции phpinfo()
или получить значение параметра настройки с помощью функции ini_get($option)
.
Получение значения upload_max_filesize в PHP:
<?php
echo 'Максимальный размер данных: ' . ini_get('post_max_size') . '<br>';
echo 'Максимальный размер файлов: ' . ini_get('upload_max_filesize') . '<br>';
echo 'Максимальное количество переменных: ' . ini_get('max_input_vars') . '<br>';
echo 'Максимальное время выполнения скрипта: ' . ini_get('max_execution_time') . '<br>';
echo 'Максимальное время обработки данных: ' . ini_get('max_input_time') . '<br>';
echo 'Память для скрипта: ' . ini_get('memory_limit') . '<br>';
Результат:
Максимальный размер данных: 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. Как правило после вывода этой ошибки в браузере, скрипт будет еще какое-то время работать.