Начиная с версии 5.4.0, язык программирования PHP содержит встроенный веб-сервер (server), который находится в модуле CLI SAPI. В этой статье мы поговорим, как он работает, настраивается и запускается. Отдельное внимание уделим известному web-серверу Apache.
В языке программирования PHP сервер (_server) выполняет лишь один однопоточный процесс, поэтому если запрос будет заблокирован, программные приложения остановятся, причем запросы URL обслуживаются из текущей директории, где он был запущен (когда не используется опция -t, обеспечивающая явное указание корневого документа). Если URL запроса не указывает на конкретный файл, в указанной директории вернется index.php или index.html. Если же файлы не существуют, их поиск продолжится в родительской директории и т. д., причем до тех пор, пока файлы не будут обнаружены либо не будет достигнут корень документа. Когда обнаружен index.php/index.html, он возвращается, причем в $_SERVER[‘PATH_INFO’] будет последняя часть URL. В обратном случае вернется код 404.
Если в процессе запуска web сервера файл PHP указывается в командной строке, он рассматривается в качестве скрипта «маршрутизации» (как роутер). Этот скрипт выполняется лишь в начале каждого запроса HTTP. Если же скрипт возвращает false, тогда запрашиваемый ресурс возвращается как есть. В обратном случае браузеру вернется вывод скрипта.

Разработчик может настроить встроенный PHP web server таким образом, чтобы он осуществлял разветвление нескольких воркеров в целях проверки кода, требующего нескольких одновременных запросов ко встроенному веб серверу. Для этого, начиная с версии 7.4.0, надо задавать в переменной окружения число требуемых воркеров, делая это перед запуском:

Данная функция является экспериментальной. Она не поддерживается в операционной системе Windows и не предназначена для использования в production. Да и вообще, встроенный web_server обычно не предназначен для того, чтобы использовать его в production.
Запуск PHP-сервера
Запуск осуществляется следующим образом:
$ cd ~/public_html
$ php -S localhost:8000
В результате в консоли будет приблизительно такой вывод:
Listening on localhost:8000
Document root is /home/me/public_html
Press Ctrl-C to quit
После этого пишем URL-запрос:
— http://localhost:8000/;
— http://localhost:8000/myscript.html.
По итогу в консоли будет выведено примерно следующее:

Можно отметить, что до версии 7.4.0 статические ресурсы с символическими ссылками в операционной системе «Виндовс» доступны не были.
Теперь давайте выполним запуск, указав корневую директорию:
$ cd ~/public_html
$ php -S localhost:8000 -t foo/
Вывод в консоли:

В примере ниже используется скрипт маршрутизации. Запросы изображений будут их отображать, однако запросы файлов HTML вернут строку «Добро пожаловать».

Обратите внимание, что встроенный web _server не должен применяться в общедоступной сети.
CLI _server: проверка использования
Чтобы обеспечить совместное использование скрипта маршрутизации при разработке с CLI _server и далее с рабочим (production) web-сервером, применяют следующую команду:

Поддержка неподдерживаемых файловых типов
Если требуется обслуживание статических ресурсов с MIME-типами, не поддерживаемыми web CLI _server, пригодится следующий код:

$ php -S localhost:8000 router.php
Local host — так называемый локальный («местный») хост, то есть компьютер, на котором запускается программа (ПК в данном случае работает как Virtual _server).
Доступ с удаленных машин
Также у разработчика есть возможность сделать сервер на PHP доступным для всех сетевых интерфейсов на 8000 порту:

Apache HTTP _Server
Apache («Апач») — известный HTTP-сервер, имя которого заимствовано от названия племени североамериканских индейцев. Это кроссплатформенное программное обеспечение, поддерживаемое многими операционными системами:
— Linux,
— Windows,
— BSD,
— Mac OS,
— Novell NetWare,
— BeOS.
Широко известна связка Apache + PHP + MySQL.
Основные достоинства «Апача» — гибкость конфигурации и надежность. С его помощью можно подключать для предоставления данных внешние модули, применять для аутентификации пользователей СУБД, модифицировать сообщения об ошибках и многое другое. Также Apache-серверы (servers) поддерживает протокол IPv4.
Одно из преимуществ — интеграция с другим программным обеспечением и языками программирования. Есть много модулей, обеспечивающих веб-серверу Apache поддержку разных систем разработки и языков программирования. Что реализуют в модулях:
— поддержку языков программирования;
— исправление ошибок;
— добавление новых функций;
— возможность модификации основных фукнций;
— средства усиления безопасности.
Раз уж затронули тему безопасности, то тут «Апач» имеет разные механизмы, включая механизм разграничения доступа к данным. Основное:
— ограничение доступа к некоторым файлам/каталогам;
— механизм авторизации пользователей, обеспечивающий доступ к каталогу на основании HTTP- и digest-аутентификации;
— ограничение доступа к конкретным каталогам либо всему серверу, которое основано на IP-адресах пользователей;
— запрет доступа к файлам по их типу, что можно распространить как на всех пользователей, так и на некоторую их часть, к примеру, организовав запрет доступа к файлам конфигурации/базы данных.
Некоторые модули позволяют реализовывать авторизацию с помощью СУБД либо PAM.
Вдобавок ко всему, «Апачу» не проблема поддерживать механизмы CGI и FastCGI, позволяющие исполнять программы почти на любых языках программирования, включая C/C++, Lua, Java.
Если вас интересует установка и настройка Apache, обратите внимание на дополнительные ссылки ниже, где вы найдете нужную информацию.
Данная статья про server PHP написана на основании следующих материалов:
- Page № 1: https://www.php.net/manual/ru/features.commandline.webserver.php;
- Page № 2: https://www.php.net/manual/ru/install.unix.apache2.php.
Хотите знать больше и получить самую современную информацию? Обратите внимание на соответствующий курс в Otus:
