Нужно быстро запустить веб-сервер для тестирования PHP-приложения?
В интерпретаторе PHP есть встроенный!
Вы можете использовать его для быстрой проверки своей работы без запуска Apache, NGINX или решения контейнеризации.
Встроенный сервер PHP получает относительно мало внимания, но является достаточно мощным для целей разработки.
В этом руководстве мы покажем, как вы можете использовать его в качестве альтернативы другим микросерверам, таким как Python’s SimpleHTTPServer или пакет http-server npm, ни один из которых не может выполнять PHP-скрипты.
Использование встроенного сервера
Встроенный сервер – это удобный механизм, помогающий тестировать PHP сайты в окружении, где нет полноценного HTTP сервера.
Он доступен в PHP 5.4 и всех последующих версиях.
Вы можете запускать его прямо из рабочей директории без необходимости предварительно устанавливать виртуальный хост.
Прежде чем использовать сервер, предупредите, что он предназначен только для разработки.
Документация PHP явно предостерегает от развертывания этого сервера c производственными приложениями.
Он недостаточно безопасен, чтобы использовать его в общедоступных сетях.
Запуск сервера
Сервер запускается путем передачи флага -S исполняемому файлу php:
$ php -S localhost:8080 [Fri Jun 10 16:00:00 2022] PHP 8.1.5 Development Server (http://localhost:8080) started
Аргумент, передаваемый команде, определяет адрес прослушивания сервера.
В приведенном примере мы использовали порт 8080 на localhost.
Теперь вы можете посетить сайт http://localhost:8080 в веб-браузере, чтобы получить доступ к содержимому вашего рабочего каталога.
Любые PHP-скрипты будут выполняться автоматически, когда вы их запросите.
Вы можете обслуживать путь, находящийся за пределами вашей рабочей директории, установив флаг -t при запуске сервера:
$ php -S localhost:8080 -t /home/$USER/public_docs
Теперь корнем документа будет /public_docs в вашей домашней папке.
Держите окно терминала открытым, пока вы используете веб-сервер.
Нажмите Ctrl+C, чтобы завершить процесс, когда закончите тестировать свой сайт.
PHP будет регистрировать каждый входящий запрос в окне терминала, включая URI и метод HTTP.
Любые не пойманные ошибки PHP также будут отображаться в логах.
Включение удаленного доступа
Прослушивание на localhost не сломает входящие соединения с других устройств в вашей сети.
Вы можете разрешить удаленный доступ, привязавшись к 0.0.0.0:
$ php -S 0.0.0.0:8080
Помните, что сервер не защищен для использования в производственных целях и не должен быть публично открыт.
Разрешайте удаленный доступ только в случае крайней необходимости, например, при тестировании определенной функции на мобильном устройстве.
Убедитесь, что используемый порт не открыт для доступа в Интернет.
Использование скрипта маршрутизатора
Вы можете дополнительно настроить веб-сервер на вызов скрипта при каждом запросе.
Это позволит вам использовать фронт-контроллер вашего приложения для выполнения расширенной динамической маршрутизации.
Функциональность маршрутизатора включается путем указания имени PHP-файла в командной строке при запуске сервера:
$ php -S localhost:8080 router.php
if ($_SERVER["REQUEST_URI"] === "/dashboard") { require_once("dashboard.php"); } else if ($_SERVER["REQUEST_URI"] === "/profile") { require_once("profile.php"); } else { require_once("404.php"); }
if (str_starts_with($_SERVER["REQUEST_URI"], "/api")) { // Route to the correct API endpoint // ... } else { // Serve other routes statically return false; }
Определение встроенного сервера по вашему PHP-коду
Оно будет установлено в cli-server, если скрипт был вызван встроенным серверным компонентом.
if (php_sapi_name() === "cli-server") { enable_development_mode(); }
Одновременная обработка нескольких запросов
По умолчанию сервер работает в однопроцессном синхронном режиме.
Запросы обрабатываются по отдельности и блокируют выполнение друг друга до их завершения.
Это одна из причин, почему сервер не подходит для производственного использования.
В PHP 7.4 добавлена поддержка одновременной обработки нескольких запросов.
Она полагается на доступность fork() и не работает в Windows.
Когда этот режим включен, сервер будет вилкой запускать нового рабочего для обслуживания каждого входящего запроса.
Вы можете активировать его, установив переменную окружения PHP_CLI_SERVER_WORKERS на нужное вам количество воркеров:
$ PHP_CLI_SERVER_WORKERS=8 php -S localhost:8080
В PHP 8.1 эта функциональность все еще помечена как экспериментальная.
Заключение
PHP имеет встроенный веб-сервер, который является удобным способом тестирования ваших приложений и быстрого предоставления содержимого локальной файловой системы в локальной сети.
Он поддерживает выполнение PHP-скриптов, маршрутизацию по принципу catch-all и статические файлы с наиболее распространенными типами MIME.
см. также:
- 📜 Как удалить определенный элемент из массива в PHP
- 📜Как удалить повторяющиеся значения из массива в PHP
- 🌐 Как добавить PHP-код в запись или страницу WordPress
- 📜 Как проверить PHP-скрипт
- 🤕 Как проверить, содержит ли строка определенное слово в PHP
- Как переключаться между несколькими версиями PHP в Ubuntu
- Как получить абсолютный путь к каталогу в PHP Script
- Как увеличить размер загрузки файлов в PHP
- Как добавить элемент в массив в PHP
- 4 Метода удаления последнего символа из строки в PHP