Самоучитель: динамические веб-приложения
Глава 2 из 18I. Карта системы70 минут

Глава 2. Воспроизводимая среда вместо случайной настройки

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

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

Учебная платформа 2026

Основной маршрут ориентирован на PHP 8.5. Примеры, которые запускаются во встроенном Playground, сохраняют совместимость с PHP 8.4, потому что локальный WebAssembly runtime проекта использует эту ветку. Для базы выбран MySQL 8.4 LTS: долговременная линия удобнее для учебного проекта, чем быстро меняющаяся innovation-ветка.

Не привязывайте проект к слову latest. Зафиксируйте минимальную поддерживаемую версию PHP, необходимые расширения и линию базы в README и composer.json. Обновление должно быть отдельным проверяемым решением.

Паспорт окружения

php -v
php --ini
php -m
composer show --platform
mysql --version

Структура проекта

app/
  public/index.php
  src/
  templates/
  migrations/
  tests/
  composer.json
  composer.lock
  .env.example

Composer без сюрпризов

composer.json описывает допустимые диапазоны, а composer.lock фиксирует разрешённые версии приложения. В CI и production выполняют composer install по lock-файлу; composer update — осознанная операция разработки с обзором изменений. Платформенные зависимости php и ext-* не устанавливают расширения, зато делают требования машиночитаемыми.

Автозагрузка PSR-4 связывает пространство имён с каталогом. После изменения mapping выполните composer dump-autoload и проверьте регистр имён: Linux различает его строже типичной Windows-среды.

Конфигурация и секреты

В репозитории хранится .env.example с названиями переменных, но без действительных паролей. Production получает секреты из панели хостинга или защищённого окружения. Код читает конфигурацию один раз в composition root и передаёт готовые значения объектам, а не обращается к глобальному окружению в каждой функции.

Не выводите DSN, пароль, токен или полный stack trace пользователю. Для журнала также применяйте allowlist полей: секрет, попавший в лог, остаётся секретом, который уже труднее заменить и удалить.

Проверка готовности

Создайте диагностическую команду, которая проверяет версию PHP, расширения и возможность открыть соединение, но не меняет данные. Она должна завершаться ненулевым кодом при несоответствии. Отдельный HTTP health endpoint не обязан раскрывать те же подробности: наружу достаточно состояния сервиса и идентификатора сборки.

Практика главы

Составьте файл требований к платформе и чек-лист первого запуска. Другой разработчик должен понять, какие команды выполнить, не спрашивая, какой ini использовался и откуда взять структуру базы.

Локальный прогресс

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

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

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

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

  • php.nethttps://www.php.net/supported-versions.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • php.nethttps://www.php.net/releases/8.5/en.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • dev.mysql.comhttps://dev.mysql.com/doc/refman/8.4/en/Первичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • getcomposer.orghttps://getcomposer.org/doc/01-basic-usage.mdПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • php-fig.orghttps://www.php-fig.org/psr/psr-4/Первичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.

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

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

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

Аналитика

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

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

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

Политики

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