Почему в официальном руководстве по PHP неправильно указано: «Вообще говоря, memory_limit должен быть больше, чем post_max_size»? »

Я публикую этот вопрос здесь после видя этот недавний вопрос SuperUser о роли memory_limit в ограничениях загрузки файлов.

В официальном руководстве по PHP в разделе post_max_size указано следующее:

Generally speaking, memory_limit should be larger than post_max_size.

Если вы понимаете PHP на каком-то уровне и что такое memory_limit по сравнению с post_max_size, этот официальный совет не имеет никакого смысла. memory_limit - это параметр, который касается ограничений памяти процесса PHP, а post_max_size просто касается максимального размера элементов, загружаемых через PHP в файловую систему.

Теперь, когда разрешено, можно выполнить POST-запрос большого объема в PHP-скрипт и сохранить его в памяти PHP. Но почти никто этого не делает. Когда подавляющее большинство файлов отправляется в сценарий PHP, этот файл передается через PHP и сохраняется в файловой системе.

Так почему же тогда дается этот совет «вообще говоря…»? Или я полностью сбился с пути после более чем 20 лет разработки PHP, и каким-то образом я смог загружать огромные файлы в приложения стека LAMP, не превышая memory_limit над post_max_size?

Если обнаружены аналогичный вопрос здесь и этот ответ, а также как этот другой ответ, это подтверждает то, что я говорю. И, черт возьми, вот еще один ответ на другой вопрос, который затрагивает тему, где в ответе четко указано «Нет».

Так почему же тогда в официальном руководстве по PHP говорится, что memory_limit имеет какое-либо отношение к post_max_size?

И да, я понимаю, что есть случаи некоторые, в которых этот совет «Вообще говоря…» действителен, но меня сбивает с толку, сколько онлайн-источников (см. Выше) противоречат тому, что сказано в руководстве по PHP. Возможно, этот «общий» совет должен быть более конкретным для разных случаев использования?

post_max_size не ограничивается загружаемыми файлами. Что, если по какой-то нечестивой причине ваш сайт имеет форму, которая отправляет 20 МБ текста с <textarea> на сервер, но ваш лимит памяти составляет 12 МБ?
MonkeyZeus 23.08.2018 19:57

Это будет зависеть от того, какие данные публикуются. Если вы не ожидаете загрузки файлов (многие сайты этого не делают), то ограничение post_max_size чем-то, что может полностью уместиться в памяти (например, массив $ _POST), неплохая идея.

Jonathan 23.08.2018 20:38

Где PHP хранит необработанные данные POST? Он полностью хранится в памяти или записывается в файловую систему?

edo888 23.08.2018 22:43
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Потому что, если вы используете массив $_POST, он должен храниться в памяти, особенно для больших данных POST. Следовательно, он должен уместиться в памяти.

Вы также можете использовать обертку потока php://input для уменьшения использования памяти вместо $_POST.

Спасибо за быстрый ответ! Я отредактировал свой вопрос, чтобы добавить некоторый контекст, но Можете ли вы взглянуть на эту ветку вопросов и ответов 2011 года, чтобы увидеть, откуда я - и другие - исхожу в отношении отношений между memory_limit и post_max_size?

Giacomo1968 23.08.2018 20:02

Руководство по php правильное. Есть много причин использовать эту структуру. Этот ответ показывает лишь один пример.

ATechGuy 23.08.2018 20:53

@ATechGuy обновит вопрос, чтобы прояснить, но когда он говорит расплывчато и пренебрежительно: «Вообще говоря…» и в Интернете есть масса примеров, которые противоречат тому, что либо данный совет плохой / устаревший, либо аргументация должна быть расширена или разъяснена.

Giacomo1968 23.08.2018 21:59

Другие вопросы по теме