Урок 02

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

Что понадобится

  • PHP 8.3+ — современная версия
  • Composer — менеджер зависимостей
  • Веб-сервер — Nginx или Apache
  • База данных — MySQL или PostgreSQL

Для начала хватит PHP + Composer. Веб-сервер и БД — позже.

Установка на Linux

Ubuntu / Debian:

sudo apt update
sudo apt install php8.3 php8.3-cli php8.3-fpm php8.3-mbstring \
    php8.3-xml php8.3-curl php8.3-zip php8.3-pgsql php8.3-mysql

Проверка:

php -v
# PHP 8.3.10 (cli) (built: Jul  4 2024)

Fedora / RHEL:

sudo dnf install php php-cli php-fpm php-mbstring php-xml php-pgsql

Установка на macOS

Через Homebrew:

brew install php
brew install composer

Проверка:

php -v

macOS поставляется с PHP, но старой версии — не используй системный.

Установка на Windows

Вариант 1: Laragon — рекомендую.

  • Скачать с laragon.org
  • Установить, запустить
  • PHP, Nginx/Apache, MySQL — всё в комплекте

Вариант 2: XAMPP — классика.

  • Скачать с apachefriends.org
  • PHP + Apache + MySQL в одном установщике

Вариант 3: WSL2 + Ubuntu — как на сервере.

wsl --install -d Ubuntu
# затем установка PHP как в Ubuntu

WSL2 даёт реальный Linux — лучший вариант для разработки.

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

Версия:

php -v

Расширения:

php -m

Должны быть: mbstring, xml, curl, json, pdo, pdo_pgsql (или pdo_mysql).

Конфиг:

php --ini
# Loaded Configuration File: /etc/php/8.3/cli/php.ini

Первый скрипт через CLI

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

<?php

echo 'Привет, мир!';

Запусти:

php hello.php
# Привет, мир!

Что произошло:

  1. PHP-интерпретатор прочитал файл.
  2. Выполнил echo.
  3. Вывел строку в stdout.

Запуск через встроенный сервер

PHP имеет встроенный веб-сервер — удобно для разработки:

php -S localhost:8000

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

Указать папку:

php -S localhost:8000 -t public/

Что здесь: -t public/ — корневая директория.

Не используй встроенный сервер в проде — он однопоточный и небезопасный. Только для разработки.

Первый скрипт в браузере

Структура:

my-app/
├── public/
│   └── index.php
└── src/

public/index.php:

<?php

declare(strict_types=1);

echo '<h1>Привет из PHP!</h1>';
echo '<p>Время: ' . date('H:i:s') . '</p>';

Запуск:

php -S localhost:8000 -t public/

Открыть http://localhost:8000 — увидишь HTML.

Переменные окружения

.env файл для конфигурации:

APP_ENV=local
APP_DEBUG=true
DB_HOST=localhost
DB_NAME=myapp

Чтение в PHP:

<?php

$host = $_ENV['DB_HOST'] ?? 'localhost';
$debug = filter_var($_ENV['APP_DEBUG'] ?? false, FILTER_VALIDATE_BOOLEAN);

Стандартный подход — библиотека vlucas/phpdotenv:

composer require vlucas/phpdotenv
<?php

require __DIR__ . '/vendor/autoload.php';

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

echo $_ENV['APP_ENV'];

Не коммить .env в git — там секреты.

Composer

Composer — менеджер зависимостей, аналог npm для PHP.

Установка:

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

Проверка:

composer --version

Создание проекта:

composer init

Установка пакета:

composer require monolog/monolog

composer.json:

{
    "name": "my/app",
    "require": {
        "php": "^8.3",
        "monolog/monolog": "^3.0"
    },
    "autoload": {
        "psr-4": {
            "App\\\\": "src/"
        }
    }
}

composer install — установить зависимости из composer.lock.

Автозагрузка

PSR-4 — стандарт автозагрузки:

{
    "autoload": {
        "psr-4": {
            "App\\\\": "src/"
        }
    }
}

Что это значит:

  • Класс App\Controllers\HomeController
  • Лежит в src/Controllers/HomeController.php

Применяем:

composer dump-autoload

Использование:

<?php

require __DIR__ . '/vendor/autoload.php';

use App\Controllers\HomeController;

$controller = new HomeController();

Ручные require больше не нужны.

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

Рекомендую:

my-app/
├── public/                 # точка входа
│   └── index.php
├── src/                    # код приложения
│   ├── Controllers/
│   ├── Models/
│   └── Services/
├── config/                 # конфиги
├── templates/              # шаблоны
├── tests/                  # тесты
├── vendor/                 # зависимости (git ignore)
├── .env
├── .env.example
├── .gitignore
├── composer.json
└── composer.lock

.gitignore:

/vendor/
.env
.phpunit.result.cache

Настройка IDE

VS Code:

  • PHP Intelephense — автодополнение, типы.
  • PHP Debug — отладка через Xdebug.
  • Laravel Blade Snippets — для Laravel.

PhpStorm:

  • Всё из коробки.
  • Настрой Xdebug в Settings → PHP → Debug.

Первый «настоящий» скрипт

public/index.php:

<?php

declare(strict_types=1);

require __DIR__ . '/../vendor/autoload.php';

$name = $_GET['name'] ?? 'Гость';
$greeting = htmlspecialchars("Привет, {$name}!", ENT_QUOTES, 'UTF-8');

header('Content-Type: text/html; charset=utf-8');

?>
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Первый скрипт</title>
</head>
<body>
    <h1><?= $greeting ?></h1>
    <p>Текущее время: <?= date('H:i:s') ?></p>
</body>
</html>

Открыть: http://localhost:8000/?name=Иван.

Важно: htmlspecialchars экранирует HTML — защита от XSS. Всегда экранируй пользовательский ввод.

Полезные команды

php -v                    # версия
php -m                    # расширения
php --ini                 # конфиг
php -S localhost:8000     # встроенный сервер
php -l file.php           # проверка синтаксиса
composer install          # установка зависимостей
composer require pack/name # добавить пакет
composer dump-autoload    # пересобрать автозагрузку

Итог

  • PHP 8.3+ — современная версия.
  • Composer — для зависимостей.
  • php -S — встроенный сервер для разработки.
  • PSR-4 — стандарт автозагрузки.
  • Структура: public/, src/, vendor/.
  • .env — для конфигурации, не в git.

Дальше — переменные и типы данных.