Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Встроенный в PHP веб-сервер Веб-разработка на PHP

PHP, как и многие другие языки, сразу поставляется со встроенным веб-сервером. Этот веб-сервер создан исключительно для удобства разработки, так как не надо ставить ничего дополнительно, но совсем не подходит для продакшен среды. В последнем случае нужно использовать nginx.

Разработка сайтов, с точки зрения организации кодовой базы, мало отличается от разработки обычных программ. Первым делом необходимо создать директорию внутри которой будет вестись разработка сайта, а затем её следует добавить в git-репозиторий. Назовём эту директорию корнем проекта. Если проект учебный, то лучше сразу создать репозиторий на GitHub и выкладывать все эксперименты туда.

Затем нужно создать файл index.php и поместить его в корень проекта. По соглашению это главный входной файл в PHP, который автоматически ищется веб-серверами. Создайте такой файл в директории проекта со следующим содержимым:

<?php

// Печатает год в STDOUT
echo date('Y');
echo "\n";

Затем запустите веб-сервер, например, на порту 8080.

php -S localhost:8080

[Wed May 27 11:55:19 2020]
PHP 7.4.3 Development Server (http://localhost:8080) started

После того как сервер будет запущен, он полностью забирает управление. Вкладка терминала больше не доступна для ввода команд. В отличие от обычных скриптов, которые выполняют свою задачу и заканчиваются, веб-сервера должны слушать порт непрерывно и сразу реагировать на входящие соединения. Поэтому однажды запустив сервер продолжит работать до тех пор, пока его не остановят. Остановить сервер можно, набрав Ctrl-C.

Такой способ запуска удобен в разработке, но в реальном окружении сервера запускают в виде демонов. Демон — процесс операционной системы, работающий в фоне.

Если в это время попытаться запустить ещё один веб-сервер в соседней вкладке на том же порту, то запуск завершится с такой ошибкой:

Failed to listen on localhost:8080 (reason: Address already in use)

В своей программистской жизни вы встретитесь с этой ошибкой не раз. Она означает, что какой-то процесс занял соответствующий порт (в данном случае 8080). В такой ситуации нужно либо остановить процесс который вам мешает, либо стартовать на другом порту.

Посмотреть какой процесс занял порт 8080 можно командой sudo lsof -i :8080

После этого откройте браузер и введите http://localhost:8080. На экран выведется текущий год. В терминале, где запущен веб-сервер, появятся записи (лог), показывающие входящие запросы.

[Wed May 27 14:53:31 2020] [::1]:52988 [200]: GET /
[Wed May 27 14:53:31 2020] [::1]:52990 [404]: GET /favicon.ico - No such file or directory

Теперь снова откройте файл index.php и добавьте ниже вывод echo 'Hello, world!';. Выполните f5 в браузере, и вы увидите, что изменения применились автоматически. Так происходит, потому что веб-сервер запускает файл на выполнение заново при каждом http запросе.

Тело HTTP-ответа

При запуске скриптов на PHP, любая функция, печатающая на экран, предсказуемо печатает на экран:

php index.php

2020
Hello, world!

Но если этот же файл запускается веб-сервером, то печать на экран (вывод в STDOUT) работает по-другому. Всё что выводится "на экран" в процессе работы скрипта, веб-сервер собирает и отправляет как тело HTTP-ответа. Это одна из причин популярности PHP. Фактически вся работа с веб-сервером встроена внутрь языка. Это позволяет очень быстро начать создавать сайты не особо разбираясь в том как этот веб-сервер работает.


Самостоятельная работа

  1. Повторите все действия из этого урока
  2. Попробуйте менять вывод внутри index.php и проверять его нажимая f5 в браузере.

Дополнительные материалы

  1. Встроенный в PHP веб-сервер
  2. Демон

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
Иконка программы PHP-разработчик
Профессия
с нуля
Разработка веб-приложений на Laravel
30 марта 10 месяцев

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»