- Установка лимитов 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 ДЛИНА GET ЗАПРОСА
- Существует ли предел объема данных в GET-запросе?
- Войдите, чтобы написать ответ
- Браузерное расширение перестает работать после перезагрузки страницы?
- Максимальный размер параметров URL в _GET
- 2 ответа
Установка лимитов 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 ДЛИНА GET ЗАПРОСА
В PHP запросы GET используются для получения данных с сервера. Эти данные могут быть переданы в заголовке запроса и представлены в виде строки запроса (query string) после знака вопроса (?).
Длина GET запроса ограничена определенным количеством символов, поэтому если передаваемый запрос превышает этот лимит, то дополнительные символы могут быть обрезаны.
Стандартное значение ограничения длины GET запроса в PHP составляет 8192 символа. Это значение может быть изменено в конфигурации сервера PHP в зависимости от его настроек.
// Пример кода PHP для получения значения длины GET запроса $length = isset($_SERVER[‘CONTENT_LENGTH’]) ? (int)$_SERVER[‘CONTENT_LENGTH’] : 0; echo «Длина GET запроса: $length байт
«;
В данном примере используется переменная $_SERVER[‘CONTENT_LENGTH’] для получения длины GET запроса в байтах. Функция isset() используется для проверки существования данной переменной и предотвращения ошибки в случае ее отсутствия.
PHP GET \u0026 POST Method
PHP-Send HTTP Get/Post Request and Read JSON response
PHP Get And Post Methods — Get And Post Method In PHP With Example — PHP Tutorial — Simplilearn
PHP: How to Get Data from a Request — PHP get and post form methods
6 СЕКРЕТОВ общения с ChatGPT [OpenAI] искусственный интеллект
Post vs Get Method in PHP
POST vs GET — PHP — Tutorial 14
Существует ли предел объема данных в GET-запросе?
Насколько длинной может быть URL в обычной ссылке?
Такую ссылку планирую вставлять в письма из формы обратной связи, чтобы админ в один клик мог перейти на сайт и автоматом вставить присланный пользователем текст в форму ответа. Хранить в базе не вариант — она не резиновая.
Средний 2 комментария
2048 символов, все зависит от лимита сервера и браузера
Владимир Коротенко, ясно. Буду тогда пробовать вставлять POST-форму в письмо, вроде бы она более-менее поддерживается современными почтовыми сервисами.
Владимир Коротенко, Нет, не так. URL ограничен 2048 символами лишь в обозревателе интернета (Internet Explorer).
like-a-boss, то есть в теории в хеш можно запихнуть и больше? А потом просчитать javascript-ом после перехода.
Надим Закиров, да, но здесь от браузера напрямую зависит, по информации из интернета некоторые и 100.000 символов держат. Я лишь могу посоветовать провести опыт и сделать это для разных браузеров. Современные держат сильно больше 2k. А вообще используйте инструменты по назначению.
like-a-boss, собственно меня интересует только хром и хромоподобные. Похоже надо проводить натурный тест.
like-a-boss, Даже самые упоротые держат 64к
А если учесть национальные символы то 32к или даже 16К
Можно попробовать сжимать текст перед отправкой, например так:
https://www.google.com/url?sa=t&source=web&rct=j&u.
Провел натурные испытания. По итогам, действительно, если в теле GET-запроса передать больше 2048 символов, то сервер выдаёт ошибку — сам браузер вполне нормально воспринимает, а вот сервер уже нет. Попробовал передать текст в виде хеша в адресной строке, здесь ситуация намного лучше — удалось спокойно передать более 10 000 русских букв. Данного объема мне в принципе достаточно для реализация задумок, всем спасибо)
Войдите, чтобы написать ответ
Браузерное расширение перестает работать после перезагрузки страницы?
Максимальный размер параметров URL в _GET
Я обращаюсь к серверу PHP с помощью REST: все данные передаются в GET-запросе в качестве параметров URL. Один из параметров поступает на сервер в query_string, но он не находится в глобальном _GET. Но сокращение параметра (обрезание, по-видимому, составляет около 512 символов) позволяет выполнить его. Предполагая, что я правильно поставил диагноз, есть ли способ изменить этот максимальный размер? Я не нашел никаких объяснений в документации, даже не упоминая об этом лимите. Это относится к сжатию Debian/Apache 2.2.16/PHP 5.3.3.
2 ответа
Хорошо, похоже, что некоторые версии PHP имеют ограничение длины параметров GET:
Обратите внимание, что установки PHP с установленным пакетом suhosin будут иметь ограничение по умолчанию — 512 символов для получения параметров. Хотя плохо практика, большинство браузеров (включая IE) поддерживает URL-адреса до примерно 2000 символов, в то время как Apache имеет значение по умолчанию 8000.
Чтобы добавить поддержку длинных параметров с помощью suhosin, добавьте suhosin.get.max_value_length = в php.ini
Я мог бы обнять тебя. Параметр запроса 800+ char crypt , возвращаемый из Sage Pay с использованием интеграции форм, просто не был получен нашим обработчиком checkout_process, что привело к появлению довольно бесполезного сообщения «Карта не может быть авторизована!». К вашему сведению, добавление php_value suhosin.get.max_value_length 2000 в .htaccess не работает, мне пришлось добавить suhosin.get.max_value_length=2000 в раздел [suhosin] в php.ini (и перезапустить httpd), чтобы изменения вступили в силу , Внезапно мой длинный параметр криптового запроса получен, обработан, и платежи по карте снова работают.
Вау, спасибо большое. На самом деле это была наша проблема. Хуже всего то, что нигде нет журналов, дающих намек на то, почему это происходит. Я был почти уверен, что в конце концов это произошло из-за длины GET, но я не мог точно определить, что это было.