<MyRusakov.ru />

Профессия Web-разработчик

Профессия Web-разработчик

Этот комплект за 8 месяцев превратит Вас в Web-разработчика с нуля. Учиться достаточно 1 час в день.

Начнёте Вы с HTML, CSS и вёрстки сайтов. Потом перейдёте к программированию и JavaScript. Затем изучите PHP, MySQL, SQL, Python. Изучите Web-фреймворки Laravel и Django. Создадите 5 своих сайтов для портфолио.

Комплект содержит:

- 540 видеоуроков

- 110 часов видео

- 1205 заданий для закрепления материала из уроков

- 5 финальных тестов

- 7 сертификатов

- 12 Бонусных курсов

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Встроенный веб‑сервер PHP: как запустить, настроить роутинг и отладку (пошаговое руководство)

Встроенный веб‑сервер PHP: как запустить, настроить роутинг и отладку (пошаговое руководство)

Встроенный веб‑сервер PHP — это самый быстрый способ запустить проект локально без лишней конфигурации. Команда php -S поднимает сервер за секунду, а простой роутер на PHP позволяет эмулировать ЧПУ, API и даже CORS для фронтенда. Разберём всё пошагово: от базового запуска до практичного мини‑роутинга.

Когда использовать встроенный сервер PHP

  • Быстрый старт прототипа или тестового задания
  • Локальная разработка без Apache/Nginx
  • Тестирование API и статических файлов

Важно: встроенный сервер предназначен только для разработки, не для продакшена.

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

Убедитесь, что PHP установлен и доступен в терминале:

php -v

Запустим простой сервер из текущей папки (докрут — текущий каталог):

php -S localhost:8000

Создайте файл index.php в корне и добавьте:

<?php
echo 'Привет из встроенного сервера PHP!';

Откройте http://localhost:8000 — вы увидите сообщение.

Запуск с отдельной папкой public и роутером

Рекомендуем хранить публичные файлы в каталоге public, а логику — вне веб‑докрута. Структура:

project/
  public/
    index.php
    assets/style.css
  router.php
  src/...

Запуск с указанием докрута и роутера:

php -S localhost:8000 -t public router.php

Роутер перехватывает запросы, отдаёт статические файлы напрямую, а всё остальное — пробрасывает в index.php.

router.php

<?php
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$full = __DIR__ . '/public' . $path;

// Если запрашивают существующий файл (CSS, JS, изображения) — отдать его сервером напрямую
if (is_file($full)) {
    return false; // Встроенный сервер сам отдаст файл
}

// Иначе — передать управление front controller-у
require __DIR__ . '/public/index.php';

public/index.php: мини‑роутинг без фреймворков

<?php
declare(strict_types=1);

// Включим подробные ошибки для разработки
ini_set('display_errors', '1');
error_reporting(E_ALL);

$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$method = $_SERVER['REQUEST_METHOD'];

// Простая зона API с CORS (для запросов с фронтенда)
if (str_starts_with($uri, '/api/')) {
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
    header('Access-Control-Allow-Headers: Content-Type');
    if ($method === 'OPTIONS') {
        exit; // preflight ответ
    }
}

if ($uri === '/' && $method === 'GET') {
    echo '<h1>Главная</h1><p>Это мини‑роутер на встроенном сервере PHP.</p>';
    exit;
}

if ($uri === '/api/ping' && $method === 'GET') {
    header('Content-Type: application/json; charset=utf-8');
    echo json_encode(['pong' => true]);
    exit;
}

if ($uri === '/users' && $method === 'GET') {
    $users = [
        ['id' => 1, 'name' => 'Алиса'],
        ['id' => 2, 'name' => 'Боб'],
    ];
    header('Content-Type: application/json; charset=utf-8');
    echo json_encode($users, JSON_UNESCAPED_UNICODE);
    exit;
}

http_response_code(404);
echo '404 Not Found';

Теперь запросы к /assets/style.css отдаются напрямую, а URL вроде /api/ping и /users обрабатываются вашим PHP‑кодом.

Полезные флаги и сценарии запуска

  • Привязать сервер только к локальному интерфейсу (без доступа из сети):
php -S 127.0.0.1:8000 -t public router.php
  • Поделиться сервером в локальной сети (осторожно! для разработки):
php -S 0.0.0.0:8000 -t public router.php
  • Windows PowerShell (из папки проекта):
php -S localhost:8000 -t public router.php

Отладка и ошибки

Для разработки включайте вывод ошибок и уровень E_ALL (как в примере выше). Для глубокой отладки можно подключить Xdebug, но чаще достаточно логов и var_dump().

Частые проблемы и решения

  • Порт занят (Address already in use). Измените порт: php -S localhost:8001. На macOS/Linux проверьте: lsof -i :8000 и завершите процесс.
  • Белый экран. Включите ошибки: ini_set('display_errors','1'); error_reporting(E_ALL);
  • Статика не грузится. Проверьте, что роутер возвращает false для файлов и путь к public совпадает.
  • Фронтенд не видит API из другого порта. Добавьте CORS‑заголовки и обрабатывайте метод OPTIONS (см. код выше).

Зачем нужен роутер, если есть index.php?

Без роутера встроенный сервер попытается найти физический файл по запрошенному пути. Роутер перехватывает запросы к «несуществующим» файлам (например, /users/42) и перенаправляет их в ваш front controller для дальнейшей логики, имитируя поведение веб‑сервера с mod_rewrite.

Лучшие практики

  • Храните публичные файлы в public и не смешивайте их с исходниками
  • Не запускайте встроенный сервер в продакшене
  • Добавляйте мини‑роутер для ЧПУ и API
  • Возвращайте корректные коды ответа: 200, 404, 405 и т. д.
  • Формируйте JSON с JSON_UNESCAPED_UNICODE для читаемости на русском

Что дальше изучать

Если хотите системно прокачать PHP (включая работу с MySQL, архитектурой и практикой), посмотрите программу курса и начните обучение: Прокачать навыки на курсе «PHP и MySQL с Нуля до Гуру 3.0».

Вывод

Встроенный веб‑сервер PHP — идеальный инструмент для быстрого старта. С одной командой php -S и коротким router.php вы получаете удобную среду для локальной разработки: статика, ЧПУ‑роутинг, JSON‑API и CORS — всё работает из коробки и без сложной настройки веб‑сервера.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (https://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: https://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.