PHP 5.4.0 から、CLI SAPI にはウェブサーバーの機能が組み込まれるようになりました。
このウェブサーバーは開発用としてのみ設計されたものであり、 実運用に使ってはいけません。
URI リクエストの処理は、PHP を開始した時点の作業ディレクトリから行われます。 -t オプションを使えば、ドキュメントルートを明示的に指定することができます。
URI リクエストにファイルが含まれない場合は、指定したディレクトリにある index.php あるいは index.html を返します。どちらも存在しない場合はレスポンスコード 404 を返します。
ウェブサーバーの開始時にコマンドラインで PHP ファイルを指定すると、
そのファイルをウェブサーバーの "ルーター" スクリプトとして使います。
このスクリプトは、各 HTTP リクエストの開始時に動きます。このスクリプトが
FALSE
を返すと、リクエストされたリソースをそのままの形式で返します。
それ以外の場合はスクリプトの出力をブラウザに返します。
例1 ウェブサーバーの起動
$ 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
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; // serve the requested resource as-is.
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