Встроенный web-сервер
Начиная с версии PHP 5.4.0 модуль CLI SAPI содержит встроенный web-сервер.
Этот web-сервер предназначен для использования при разработке и не должен
использоваться на обычном сервере.
URI запросы обслуживаются из текущей директории, в которой был запущен PHP,
если не используется опция -t для явного указания корневого документа.
Если URI запроса не указывает на определенный файл, то будет возвращен
либо index.php, либо index.html в данной директории. Если не существует
ни одного из них, то возвращается 404 код ответа.
Если PHP-файл указывается в командной строке, когда запускается веб-сервер,
то он рассматривается как скрипт "маршрутизации" web-сервера.
Скрипт выполняется в самом начале после каждого HTTP-запроса. Если этот
скрипт возвращает FALSE, то запрашиваемый ресурс возвращается как есть.
В противном случае браузеру будет возвращен вывод этого скрипта.
Пример #1 Запуск web-сервера
$ cd ~/public_html
$ php -S localhost:8000
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
После URI запросов http://localhost:8000/ и http://localhost:8000/myscript.html
в консоли выведется примерно следующее:
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
Пример #2 Запуск с указанием корневой директории
$ cd ~/public_html
$ php -S localhost:8000 -t foo/
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
Пример #3 Использование сктрипта маршрутизации
Запросы к изображениям будут возращать их, но запросы к HTML файлам
будут возращать "Welcome to PHP".
<?php
// 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
После нескольких URI запросов в консоли выведется примерно следующее:
PHP 5.4.0 Development Server started at Thu Jul 21 10:53:19 2011
Listening on localhost:8000
Document root is /home/me/public_html
Press Ctrl-C to quit.
[Thu Jul 21 10:53:45 2011] ::1:55801 GET /mylogo.jpg - Request read
[Thu Jul 21 10:53:52 2011] ::1:55803 GET /abc.html - Request read
[Thu Jul 21 10:53:52 2011] ::1:55804 GET /favicon.ico - Request read