Самоучитель: PHP под капотом: runtime и стандартная библиотека
Глава 2 из 20I. Среда выполнения90 минут

Глава 2. Конфигурация как слоёный контракт

Настройка становится управляемой, когда известны источник каждого значения, область действия, возможность изменения и безопасный способ проверки.

После главы вы сможете
  • читать активную конфигурацию
  • разделять платформу и приложение
  • обнаруживать дрейф

Четыре слоя вместо магического файла

Pulse различает конфигурацию сборки PHP, системный php.ini, дополнительные ini-файлы и параметры приложения. Значение memory_limit относится к runtime, а размер пакета Pulse — к приложению. Пароль базы не принадлежит ни одному публичному ini и поступает из защищённого окружения.

Одинаковое имя переменной в нескольких местах создаёт не гибкость, а спор о приоритете. Для каждого параметра определите единственный владеющий слой и покажите эффективное значение диагностической командой без раскрытия секрета.

Разрешение конфигурации

От платформы к приложениюКаждый слой отвечает за собственный класс значений; приложение получает уже проверенный снимок.Buildextensionsphp.iniruntimescan dirSAPIenvironmentsecretsApp configtyped
Каждый слой отвечает за собственный класс значений; приложение получает уже проверенный снимок.

Почему CLI и FPM расходятся

Команда php --ini показывает конфигурацию CLI. FPM способен читать другой основной файл, другой каталог дополнительных настроек и параметры пула. Если разработчик проверил только терминал, он ещё не доказал фактический runtime веб-запроса.

Создайте безопасный диагностический endpoint для администратора или запускайте команду внутри того же контейнера и SAPI. Публичный phpinfo() раскрывает пути, модули и переменные окружения, поэтому не является постоянной страницей здоровья.

Типизированный снимок

 5000) {
            throw new InvalidArgumentException('batchSize out of range');
        }
    }
}

Настройка и безопасность

display_errors полезен локально и опасен в production, где сообщение может раскрыть путь или фрагмент данных. log_errors и централизованный обработчик обеспечивают диагностику, но журнал тоже получает только разрешённые поля. expose_php не является главным рубежом безопасности, однако лишнее раскрытие не приносит пользы.

ini_set меняет только допустимые директивы и только в своей области. Если код зависит от успешного изменения, он проверяет возвращаемое значение. Критические требования лучше валидировать при запуске, а не чинить молча внутри запроса.

Лаборатория

Соберите команду config:check: она выводит ветку PHP, SAPI, загруженный ini, нужные расширения и обезличенные параметры Pulse. Несовпадение должно давать ненулевой exit code.

  • Не печатайте DSN с паролем.
  • Сравните CLI и FPM.
  • Добавьте верхнюю границу batchSize и отрицательный тест.
Локальный прогресс

Закрепите материал

Отметка, заметка, чек-лист и ответы остаются в localStorage этого браузера и не отправляются в аналитику.

Контрольная карта лаборатории

Выполнено: 0 из 3

Локальный тест

1. Что доказывает php --ini?
2. Где преобразовывать строку окружения в int?

Перелинковка со справочником

Проверка актуальности

  • php.nethttps://www.php.net/manual/en/configuration.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • getcomposer.orghttps://getcomposer.org/doc/articles/composer-platform-dependencies.mdПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.

Текст и схемы созданы для этого самоучителя без воспроизведения страниц, иллюстраций и листингов приложенной книги. Проверено: .

Данные этого сервиса

Настройки cookie и локальных данных

Аналитика

Текущий статус: не выбран. До согласия обе аналитические системы не загружаются.

Локальные данные

Удаление затрагивает только ключи PHP-сервиса в этом браузере и требует подтверждения.

Политики

Политика конфиденциальности · Политика использования файлов cookie