Установка, запуск и встроенный сервер

PHP - это язык, который живёт почти везде: на хостингах, в старых проектах и в сердцах тех, кто однажды писал echo "Привет";.

Сегодня твоя задача - запустить PHP локально и убедиться, что он вообще работает. Спойлер: работает.

Варианты установки

Выбери свою ОС:

brew install php
php -v
sudo apt update
sudo apt install -y php-cli
php -v

Самый простой путь для новичка:

  • XAMPP или Laragon - готовый сборник PHP + Apache + MySQL.
  • Либо WSL2 + Ubuntu (если хочешь «как на сервере»; тогда дальше используй вкладку Linux).

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

php -v
Для первых уроков тебе достаточно **php-cli** и встроенного сервера. Apache/Nginx пригодятся позже - когда будешь деплоить и настраивать домены.

Какую версию выбрать

PHP активно развивается. На 2026 год актуальны версии 8.1-8.3, более старые официально не поддерживаются.

ВерсияЧто нового (для нас)
8.1enum, readonly свойства, never тип, fibers
8.2readonly классы, DNF-типы (A&B|C), новые random-функции
8.3Типизированные константы классов, json_validate(), #[Override]

Для новых проектов ставь последнюю стабильную (8.3). Если работаешь со старым кодом - посмотри в composer.json ("require": { "php": "^8.1" }), какая минимально нужна.

Первый скрипт

Создай файл hello.php:

<?php
echo 'Привет, BackendStart!';

Запусти:

php hello.php

Если выводится строка - установка прошла нормально. Если PHP «не найден» - путь к нему не попал в PATH, переустанови через пакетный менеджер.

Встроенный сервер

PHP умеет поднимать простой сервер (для обучения - топ):

php -S localhost:8000 -t public

Где:

  • -S - адрес и порт
  • -t public - папка, из которой раздаём файлы

Сделай public/index.php:

<?php
phpinfo();

Открой в браузере: http://localhost:8000.

Он создан для разработки и обучения. На боевом сервере используй Nginx/Apache + PHP-FPM.

Где живёт php.ini

Конфигурация PHP - это файл php.ini. Узнать его расположение:

php --ini

Вывод покажет основной файл и список подгружаемых из conf.d/. Самые полезные настройки для начала:

; локально - показать все ошибки
display_errors = On
error_reporting = E_ALL

; обычно достаточно
memory_limit = 256M

; время жизни одного CLI-скрипта (0 = без лимита)
max_execution_time = 30

В проде display_errors обязательно Off - пользователь не должен видеть стектрейсы (подробно - в уроке про безопасность).

Расширения PHP

Большая часть стандартной библиотеки - это расширения (mbstring, pdo_mysql, curl, gd, ...). Что включено сейчас:

php -m

Если нужного нет - поставь системным пакетом и включи строкой extension=имя в php.ini:

sudo apt install php-mbstring php-pdo-mysql
; в php.ini (обычно достаточно одной строки)
extension=mbstring
extension=pdo_mysql

После правки php.ini перезапусти CLI/FPM, иначе изменения не применятся.

OPcache - короткое intro

OPcache кеширует скомпилированный байт-код в памяти. Без него каждый запрос заново парсит и компилирует PHP-файлы. С ним - приложение работает в 2-3 раза быстрее.

Минимальная активация в php.ini:

[opcache]
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 10000
opcache.validate_timestamps = 1   ; локально 1, на проде 0 (см. [урок 22-fpm](./22-fpm.md))

Проверить, что включён: php -i | grep opcache.enable.

Запуск через Docker

Если не хочешь ставить PHP в систему - используй официальные образы:

# одноразовый запуск
docker run --rm -v "$PWD":/app -w /app php:8.3-cli php hello.php

# встроенный сервер
docker run --rm -p 8000:8000 -v "$PWD":/app -w /app php:8.3-cli \
  php -S 0.0.0.0:8000 -t public

В реальных проектах PHP в Docker всегда идёт связкой php:8.3-fpm + nginx - это разберём в уроке про PHP-FPM.

Типичные ошибки

  • command not found: php - PHP не в PATH. Перезапусти терминал; если не помогло - переустанови через brew/apt.
  • Could not open input file - путь к файлу указан неверно. Проверь, что ты в нужной директории (pwd).
  • Адрес localhost:8000 уже занят. Что-то другое слушает порт - смени на 8001 или останови предыдущий процесс (lsof -i :8000).
  • Изменил php.ini - ничего не поменялось. Файл php.ini для CLI и для FPM/Apache - это разные файлы. Проверь через php --ini, какой именно используется.
  • Расширение не включается после extension=.... Возможно, не установлен системный пакет (php-mbstring) - extension= - это только активация, не установка.

Best practices

  • На локальной машине держи ту же major-версию, что и в проде, - иначе ловишь несовместимости при деплое.
  • Версию PHP проекта фиксируй в composer.json ("require": { "php": "^8.3" }) - Composer не даст поставить зависимости на несовместимом PHP.
  • Для CLI-команд используй php script.php, для веба - встроенный сервер локально, FPM+Nginx на проде. Не путай контексты.
  • В IDE поставь плагин/настройку для подсветки PHP-версии (PhpStorm - встроено, VS Code - PHP Intelephense).
  • Composer - обязательный спутник: про него подробно в уроке 16-namespaces.

Мини-задание

  • Установи PHP 8.3 и убедись, что php -v показывает мажорную 8.3.
  • Запусти hello.php из CLI.
  • Подними встроенный сервер, открой phpinfo() в браузере, найди в нём раздел opcache - включён ли он.
  • Через php --ini найди путь к своему php.ini, открой его и посмотри значение memory_limit.

Зарегистрируйтесь бесплатно, чтобы пройти квиз, решить задание с автопроверкой и вести прогресс.