Начиная с версии 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 server: Web, PHP и Apache

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

PHP server: Web, PHP и Apache

Данная функция является экспериментальной. Она не поддерживается в операционной системе 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.

По итогу в консоли будет выведено примерно следующее:

PHP server: Web, PHP и Apache

Можно отметить, что до версии 7.4.0 статические ресурсы с символическими ссылками в операционной системе «Виндовс» доступны не были.

Теперь давайте выполним запуск, указав корневую директорию:

$ cd ~/public_html

$ php -S localhost:8000 -t foo/

Вывод в консоли:

PHP server: Web, PHP и Apache

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

PHP server: Web, PHP и Apache

Обратите внимание, что встроенный web _server не должен применяться в общедоступной сети.

CLI _server: проверка использования

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

PHP server: Web, PHP и Apache

Поддержка неподдерживаемых файловых типов

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

PHP server: Web, PHP и Apache

$ php -S localhost:8000 router.php

Local host — так называемый локальный («местный») хост, то есть компьютер, на котором запускается программа (ПК в данном случае работает как Virtual _server).

Доступ с удаленных машин

Также у разработчика есть возможность сделать сервер на PHP доступным для всех сетевых интерфейсов на 8000 порту:

PHP server: Web, PHP и Apache

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:

PHP server: Web, PHP и Apache