PHP может запускаться из терминала, но чаще его задача — обработать запрос браузера и вернуть страницу. Когда вы открываете каталог, браузер отправляет HTTP-запрос, веб-сервер передаёт его PHP, а PHP формирует ответ с кодом состояния, заголовками и телом.
Запрос и ответ на простом примере
Откройте public/index.php и посмотрите на адрес. Для пути /books сервер передаёт приложению URI и HTTP-метод. В PHP это можно прочитать так:
<?php
declare(strict_types=1);
$method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
$uri = $_SERVER['REQUEST_URI'] ?? '/';
$path = parse_url($uri, PHP_URL_PATH) ?? '/';
if ($method === 'GET' && $path === '/books') {
http_response_code(200);
header('Content-Type: text/html; charset=utf-8');
echo '<h1>Мои книги</h1>';
exit;
}
http_response_code(404);
header('Content-Type: text/plain; charset=utf-8');
echo 'Страница не найдена';
$_SERVER содержит сведения о текущем запросе. http_response_code() задаёт статус, а header() — заголовок ответа. Заголовки нужно отправить до любого вывода, иначе PHP может уже начать передавать тело ответа.
GET и POST решают разные задачи
GET обычно запрашивает страницу или данные; его параметры видны в адресе после ?. POST отправляет содержимое формы или создаёт/изменяет ресурс. Сам метод не проверяет права пользователя и не защищает от подделки запроса — это обязанности приложения.
Данные запроса нельзя считать доверенными. Путь, query-параметр или заголовок может быть произвольным. Проверяйте их формат, прежде чем выбирать действие или обращаться к хранилищу.
Запускаем встроенный сервер с маршрутизатором
Для локальной разработки запустите:
php -S 127.0.0.1:8000 -t public
Если PHP не находит маршрут для произвольного URL, встроенный сервер обычно ищет соответствующий файл. В следующей части мы сделаем единую точку входа и разберём адреса явно. Важно: встроенный сервер только для локальной разработки; официальный PHP не рекомендует открывать его в публичную сеть.
Сначала статус, затем тело
Для несуществующей страницы возвращайте статус 404, а не обычный 200 с текстом «не найдено». Для некорректных данных позже используем 400 или возвращаем форму с подсказкой. Код состояния сообщает браузеру, поисковым системам и другим клиентам, чем закончился запрос.
Проверка
- Откройте
/booksи проверьте, что ответ содержит страницу каталога. - Откройте
/unknownи убедитесь, что приложение возвращает 404. - Посмотрите ответ во вкладке Network браузера: там видны статус и заголовки.
Теперь у приложения есть две разные задачи: определить маршрут запроса и отобразить HTML. Разнесём их по файлам и добавим шаблон списка.
Навигация по курсу
Часть 11 из 16.
← Часть 10: Сохраняем данные PHP в JSON: первое хранилище каталога · Часть 12: Маршрутизация и шаблоны PHP: собираем веб-страницу →
0
9