Начиная с версии 5.4 в PHP появился встроенный веб-сервер. В документации говорится, что этот веб-сервер предназначен только для разработки и не должен быть использован на боевом сервере.

Запросы обрабатываются из текущей рабочей директории, где был запущен PHP. Если не указан параметр -t, который задает явное указание на корневую директорию (document root). Если в параметрах указан php-файл, то этот файл рассматривается как скрипт роутинга, если скрипт возвращает FALSE, то файл отдается как есть.

Версия PHP: php-5.4.0beta2-Win32-VC9-x86.
Для пробного запуска, в качестве тестового приложения, я взял средне-типовой сайт типа блог.

Итак, пробуем запустить


C:\TestServer>php -S localhost:80
PHP 5.4.0beta2 Development Server started at Sat Oct 22 13:06:17 2011
Listening on localhost:80
Document root is C:\TestServer
Press Ctrl-C to quit.

Открываем http://localhost/, сервер выдает ошибку «Not Found». В консоли:
[Sat Oct 22 13:16:17 2011] 127.0.0.1:51155 [404]: / - No such file or directory
[Sat Oct 22 13:16:18 2011] 127.0.0.1:51157 [404]: /favicon.ico - No such file or directory

Если указать адрес как http://localhost/index.php, то получим результат работы скрипта. Давайте напишем скрипт роутинга, который будет работать так как в большинстве случаев mod_rewrite.
<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteRule ^(.*)$ index.php\?p=$1 [QSA,L]
</IfModule>

Скрипт роутинга (routing.php)


<?php
// routing.php
$Filepath = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
// ^ это нужно чтобы сервер не искал файл вида /news/?page=2
$File = __DIR__ . '/' . trim($Filepath, '/');
if (file_exists($File)) return False; // файл (или директория) существует, отдаем как есть
$_GET['p'] = $Filepath;
unset($Filepath, $File);
include_once 'index.php';

Запуск с указанием рабочей директории и скрипта роутинга


php -S localhost:80 -t C:\TestServer routing.php


Впечатление


Работает оочень медленно. Сравнивал с apache «на глаз», тестовый сайт загружался в 5-8 раз медленнее.

Ссылки


[1]: Built-in web server
[2]: PHP 5.4 Beta2 (Windows Binaries)
[3]: PHP 5.4 Beta2 (Source)