Встроенный web-сервер

Начиная с версии PHP 5.4.0 модуль CLI SAPI содержит встроенный web-сервер.

Этот web-сервер предназначен для использования при разработке и не должен использоваться на обычном сервере.

Запросы обслуживаются последовательно.

URI запросы обслуживаются из текущей директории, в которой был запущен PHP, если не используется опция -t для явного указания корневого документа. Если URI запроса не указывает на определенный файл, то будет возвращен либо index.php либо index.html в указанной директории. Если оба файла отсутствуют, то возвращается 404 код ответа.

Если PHP-файл указывается в командной строке, когда запускается веб-сервер, то он рассматривается как скрипт "маршрутизации". Скрипт выполняется в самом начале после каждого HTTP-запроса. Если этот скрипт возвращает FALSE, то запрашиваемый ресурс возвращается как есть. В противном случае браузеру будет возвращен вывод этого скрипта.

Стандартные MIME-типы возращаются для файлов со следующими расширениями: .css, .gif, .htm, .html, .jpe, .jpeg, .jpg, .js, .png, .svg, и .txt. Расширения .htm и .svg определяются начиная с PHP 5.4.4.

Пример #1 Запуск web-сервера

[php]$ cd ~/public_html $ php -S localhost:8000[/php]

В консоли выведется:


[php] PHP 5.4.0 Development Server started at Thu Jul 21 10:43:28 2011 Listening on localhost:8000 Document root is /home/me/public_html Press Ctrl-C to quit [/php]

После URI запросов http://localhost:8000/ и http://localhost:8000/myscript.html в консоли выведется примерно следующее:


[php] PHP 5.4.0 Development Server started at Thu Jul 21 10:43:28 2011 Listening on localhost:8000 Document root is /home/me/public_html Press Ctrl-C to quit. [Thu Jul 21 10:48:48 2011] ::1:39144 GET /favicon.ico - Request read [Thu Jul 21 10:48:50 2011] ::1:39146 GET / - Request read [Thu Jul 21 10:48:50 2011] ::1:39147 GET /favicon.ico - Request read [Thu Jul 21 10:48:52 2011] ::1:39148 GET /myscript.html - Request read [Thu Jul 21 10:48:52 2011] ::1:39149 GET /favicon.ico - Request read [/php]

Пример #2 Запуск с указанием корневой директории

[php]$ cd ~/public_html $ php -S localhost:8000 -t foo/[/php]

В консоли выведется:


[php] PHP 5.4.0 Development Server started at Thu Jul 21 10:50:26 2011 Listening on localhost:8000 Document root is /home/me/public_html/foo Press Ctrl-C to quit [/php]

Пример #3 Использование скрипта маршрутизации

В этом примере, запросы изображений будут возвращать их, но запросы HTML файлов будут возвращать "Welcome to PHP".



Наша группа в телеграмм для обмена идеями, проектами, мыслями, людьми в сфере ИТ г.Ростова-на-Дону: @it_rostov
// router.php
if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"])) {
    return false;    // сервер возвращает файлы напрямую.
} else { 
    echo "<p>Welcome to PHP</p>";
}

$ php -S localhost:8000 router.php

Пример #4 Проверка использования CLI web-сервера

Для совместного использования скрипта маршрутизации при разработке с CLI web-сервером и в дальнейшем с боевым web-сервером:


// router.php
if (php_sapi_name() == 'cli-server') {
    /* Маршрутизация с заданными правилами и выход с возвращением false */
}
/* продолжение с обычными операциями index.php */

$ php -S localhost:8000 router.php

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

Если вам нужно обслуживать статические ресурсы с MIME типами неподдерживаемыми CLI web-сервером:


// router.php
$path = pathinfo($_SERVER["SCRIPT_FILENAME"]);
if ($path["extension"] == "ogg") {
    header("Content-Type: video/ogg");
    readfile($_SERVER["SCRIPT_FILENAME"]);
}
else {
    return FALSE;
}

$ php -S localhost:8000 router.php

Пример #6 Доступ к CLI web-серверу с удаленных машин

Вы можете сделать web-сервер доступным на 8000 порту для всех сетевых интерфейсов:


$ php -S 0.0.0.0:8000

User Contributed Notes 3 notes



1
dstrout at dstrout dot net7 months ago
Just gave it a try, and it is IPv6 compatible, if anyone was wondering.


0
Ivan Ferrer4 months ago
On Windows you may find useful to have a phpserver.bat file in shell:sendto with the folowing:
explorer http://localhost:8888
rem check if arg is file or dir
if exist "%~1\" (
  php -S localhost:8888 -t "%~1"
) else (
  php -S localhost:8888 -t "%~dp1"
)
then for fast web testing you only have to SendTo a file or folder to this bat and it will open your explorer and run the server.


-4
Stefano F. Rausch1 year ago
To develop / deploy websites in 3 stages, i.e. ( 1 ) locally, ( 2 ) with an access controlled dedicated beta / test website in the www and ( 3 ) the production site, you can have ( 1 ) & ( 2 ) using the same domain name - port free - as follows:
- look up the IP address of the beta.web.site
and edit the hosts file to reflect:
- <IP> beta.web.site
- 127.0.0.1 beta.web.site
Start the built-in web server to work locally with:
- sudo php -S beta.web.site:80
and just hit http://beta.web.site as usual. Switching back and forth between ( 1 ) and ( 2 ) is as easy as telling the php engine not to fake a server any more :) Nice!
Happy PHP'ing.




Смотрите также:
Описание на ru2.php.net
Описание на php.ru

.

Популярное:


Содержание: