Почему запуск является частью программы
Одинаковый файл способен вести себя по-разному в CLI, встроенном сервере и production-FPM: отличаются рабочий каталог, переменные окружения, лимиты, пользователь процесса и загруженный ini. Поэтому фраза «у меня работает» ничего не доказывает без указания профиля выполнения.
В этом практикуме мы строим дневник тренировок. Его первый вертикальный срез не сохраняет упражнения: он сообщает build id, версию платформы и готовность обязательных расширений. Такой скучный результат создаёт основу для повторяемых экспериментов.
Паспорт среды
Ветка вместо слова latest
На август 2026 PHP 8.5 находится на активной поддержке, а 8.4 остаётся поддерживаемой веткой. В composer.json указывают минимальную платформу и ext-*, но не маскируют несовместимость через бесконтрольный ignore-platform-reqs. Точный patch-релиз обновляется отдельно после тестов.
Встроенные примеры сервиса исполняются локальным PHP 8.4 WebAssembly, поэтому синтаксис только PHP 8.5 показывается как статический фрагмент. Это честнее, чем обещать выполнение в runtime, который ещё не поддерживает конструкцию.
Первый исполняемый контракт
<?php
declare(strict_types=1);
$required = ['json', 'mbstring'];
$missing = array_values(array_filter(
$required,
static fn (string $extension): bool => !extension_loaded($extension),
));
echo $missing === [] ? 'environment:ready' : 'environment:incomplete';Раздельные конфигурации
CLI и веб-процесс могут читать разные ini. Сравните memory_limit, date.timezone, opcache и доступные драйверы PDO именно в том SAPI, где выполняется сценарий. Публичный диагностический endpoint должен показывать только безопасный итог, а подробности остаются в закрытой команде или журнале.
Web-root направляется в public, исходники и секреты лежат выше. Встроенный сервер подходит для обучения, но его свойства не переносятся автоматически на production. Цель локального запуска — ускорить обратную связь, а не имитировать инфраструктуру до последнего байта.
Лабораторная работа
Создайте команду doctor.php для дневника тренировок. Она проверяет версию, json, mbstring, PDO и временную зону; затем печатает одну строку статуса без чувствительных значений.
Закрепите материал
Отметка, заметка, чек-лист и ответы остаются в localStorage этого браузера и не отправляются в аналитику.
Перелинковка со справочником
Проверка актуальности
- php.nethttps://www.php.net/supported-versions.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
- php.nethttps://www.php.net/releases/8.5/en.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
- getcomposer.orghttps://getcomposer.org/doc/articles/composer-platform-dependencies.mdПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
Текст и схемы созданы для этого самоучителя без воспроизведения страниц, иллюстраций и листингов приложенной книги. Проверено: .