Мы знаем, что на официальной странице https://hub.docker.com/_/php рекомендуется использовать php.ini для продакшена:
FROM php:8.2-fpm-alpine
# Use the default production configuration
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"И тут возникает сразу 2 вопроса:
Ответ: из-за совместимости!
В самом исходном коде PHP (на языке C) значение по умолчанию часто оставляется пустым или минимальным. Это делается для того, чтобы PHP мог запуститься вообще без файла php.ini. В таком «голом» состоянии он должен вести себя максимально предсказуемо и просто, копируя логику старых версий (совместимость).
Кроме прод-файла, есть и дев-файл:
Фактически мы имеем три версии PHP:
Голый (максимально совместимый со старым кодом) PHP имеет request_order = no value
Это означает, что PHP не заполняет массив $_REQUEST значениями из GET, POST или COOKIE на основе этого параметра. В этом случае PHP "откатывается" к поведению, заданному параметром variables_order, значит $_REQUEST будет просто копией того, что попало в массивы, разрешенные в variables_order (обычно это EGPCS). Но, это считается небезопасным, так как по умолчанию в $_REQUEST могут попасть Cookies, что открывает возможность для атак с подменой параметров. Поэтому, в php.ini файлах прописано request_order = "GP".
Так все же, почему не прописать "GP" прямо в код навсегда?
Итог: no value — это "чистый лист" самого движка. GP — это стандарт индустрии и безопасности, который навязывается через конфигурационные файлы, поставляемые вместе с дистрибутивом.
Известно, что в:
Известно, что файлы в директориях подключаются в алфавитном порядке. Например сейчас в /usr/local/etc/php-fpm.d/ есть следующие файлы и порядок загрузки будет таким:
Следовательно, чтобы переопределить настройки указанные во всех файлах, нужно создать свой файл, например zzz-custom.conf
Комментарии
Комментариев пока нет.