Как занятно иногда копать мануалы чуть глубже справочника функций: PHP built-in HTTP server

Главные вкладки

Аватар пользователя OldWarrior OldWarrior 2 июля 2017 в 9:50
1

Как говорится - "баян", наверное, но таки для меня стало новостью )

Недавно копал параметры запуска PHP с командной строки и с удивлением обнаружил, что в интерпретатор PHP ещё аж с 5.4.0 встроен собственный простенький HTTP-сервер: http://php.net/manual/ru/features.commandline.webserver.php

Встроен в CLI-версию интерпретатора (т.е. версию для парсинга через интерфейс командной строки). Запуск сервера через параметр -S с указанием любого порта:

$ php -S localhost:8000

и/или доменного имени, а также корневой директории (параметр -t), а также с собственным (не глобальным) php.ini

$ php -S somedomain:8000 -t my_root_folder/ -c php.ini

Побаловавшись немного, выяснил, что:

  1. phpinfo() показывает Server API: Built-in HTTP server , а php_sapi_name() показывает cli-server
  2. работает быстро, быстрее Apache(впрочем в ущерб привычному функционалу апача, типа mod_rewrite, ограничение доступа и т.д.).
  3. сервер слушает только один домен и один порт
  4. DOCUMENT_ROOT и, возможно, какие-то другие переменные апача отсутствуют, поэтому нужно их предварительно устанавливать используя .bat или .sh (если планируется их использование из php-кода)
  5. Drupal запускать на нём не пробовал, если что )

Практическое (в смысле - серьёзное) применение этого сервера под сомнением, конечно. Собственно, в документации написано, что сервер встроен только для тестовых нужд. Однако, в некоторых случаях фича может позволить держать в "одном флаконе" какую-то ограниченную по функционалу демонстрационную сборку или "мобильный" набор утилит, написанных на PHP и запускать на машине, пока не имеющей установленной связки AMP. В совокупности с sqlite можно сделать даже ещё один шаг вперёд, подключив SQL )

Комментарии

Аватар пользователя bumble bumble 2 июля 2017 в 12:54

Для разработки, в принципе, хватает.

Знаю точно, что некоторые именно этот сервер и используют для работы с проектом. Лично я - по старинке, с апачиком.

Аватар пользователя OldWarrior OldWarrior 2 июля 2017 в 12:59

bumble wrote:

Для разработки, в принципе, хватает.
Знаю точно, что некоторые именно этот сервер и используют для работы с проектом. Лично я - по старинке, с апачиком.

Просто первое, с чём я столкнулся - не инициализированная переменная DOCUMENT_ROOT (я запускал под Windows). Поэтому как бы были сомнения, что сервер обрабатывает и выставляет всё необходимое для Друпала окружение.

Аватар пользователя bumble bumble 2 июля 2017 в 13:05

Под Win нет возможности проверить. На лине - отрабатывает на ура (ПЫХ 7.1, fpm, Ubuntu).
На всякий спрошу: в корне Друпала запускаете команду?

Аватар пользователя Grayw0lf Grayw0lf 2 июля 2017 в 13:56

OldWarrior wrote:

DOCUMENT_ROOT (я запускал под Windows).

я обычно для разработки держу виртуальную машину с настроенным сервером, как то опенсервер перестал удовлетворять нуждам да под виндой не весь инструментарий работает как надо, так что все таки под винду виртуалка это спасение.

Аватар пользователя OldWarrior OldWarrior 2 июля 2017 в 17:14

В последнее время работаю чаще под windows. Не использую ни openserver, ни denver, ни прочие all-in-one пакеты. Все сервера и компоненты поставлены и настроены вручную по отдельности. Каких-либо серьёзных проблем пока не отмечал, кстати.

Хотя согласен, что под линуксом веб разработка таки кошернее по ряду параметров.

Аватар пользователя multpix multpix 3 июля 2017 в 11:29

OldWarrior wrote:

Drupal запускать на нём не пробовал, если что )

Да, как уточнил Антон:
drush rs
И можно спокойно работать с экземпляром друпал через веб.
Локально, только так и делаю,
отдельный виртуальный хост для nginx поднимаю очень редко.

Возможно, имеет смысл при запуске явно указать абсолютный путь к корню ключем
--root=/PATH/TO/DRU

Аватар пользователя OldWarrior OldWarrior 3 июля 2017 в 13:54

multpix wrote:
Возможно, имеет смысл при запуске явно указать абсолютный путь к корню ключем
--root= ...

Я с drush-версией пока не экспериментировал, все написанное относится к CLI SAPI в чистом виде. Там ключ -t. Ну то есть - да, пробовал.

Повторюсь, это может быть баг только win-версии. Я просто установил DOCUMENT_ROOT вручную перед запуском сервера.