Самоучитель: PHP 8.5: инженерный практикум
Глава 1 из 22I. Надёжные примитивы65 минут

Глава 1. Контракт запуска и первый диагностический срез

Программа начинается не с echo, а с договора об окружении: какая ветка PHP, какой ini, какие расширения и какой способ запуска считаются допустимыми.

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

Почему запуск является частью программы

Одинаковый файл способен вести себя по-разному в CLI, встроенном сервере и production-FPM: отличаются рабочий каталог, переменные окружения, лимиты, пользователь процесса и загруженный ini. Поэтому фраза «у меня работает» ничего не доказывает без указания профиля выполнения.

В этом практикуме мы строим дневник тренировок. Его первый вертикальный срез не сохраняет упражнения: он сообщает build id, версию платформы и готовность обязательных расширений. Такой скучный результат создаёт основу для повторяемых экспериментов.

Паспорт среды

Проверка среды выполненияКаждый этап превращает неявное предположение об окружении в наблюдаемый факт.Командаphp -vКонфигурацияphp --iniМодулиphp -mComposerplatformSmokeexit code
Каждый этап превращает неявное предположение об окружении в наблюдаемый факт.

Ветка вместо слова 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Первичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.

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

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

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

Аналитика

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

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

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

Политики

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