ビルトインウェブサーバー
  警告
   
    このウェブサーバーは、アプリケーション開発の支援用として設計されたものです。
    テスト用に使ったり、制約のある環境でアプリケーションをデモするために使ったりすることもできるでしょう。
    あらゆる機能を兼ね備えたウェブサーバーを目指したものではないので、
    公開ネットワーク上で使ってはいけません。
   
   
  
   CLI SAPI にはウェブサーバーの機能が組み込まれています。
  
  
   このウェブサーバーは単一のシングルスレッドプロセスしか実行しないので、
   リクエストがブロックされると、PHP アプリケーションはストールします。
  
  
    URI リクエストの処理は、PHP を開始した時点の作業ディレクトリから行われます。
    -t オプションを使えば、ドキュメントルートを明示的に指定することができます。
    URI リクエストにファイルが含まれない場合は、指定したディレクトリにある index.php
    あるいは index.html を返します。どちらも存在しない場合は、
    親ディレクトリにさかのぼって index.php と index.html を探します。
    どちらか一方が見つかるか、あるいはドキュメントルートに達するまでこれが続きます。
    index.php あるいは index.html が見つかるとそれを返し、
    $_SERVER['PATH_INFO'] が URI の末尾にセットされます。
    見つからなかった場合はレスポンスコード 404 を返します。
  
  
    ウェブサーバーの開始時にコマンドラインで PHP ファイルを指定すると、
    そのファイルをウェブサーバーの "ルーター" スクリプトとして使います。
    このスクリプトは、各 HTTP リクエストの開始時に動きます。このスクリプトが
    false を返すと、リクエストされたリソースをそのままの形式で返します。
    それ以外の場合はスクリプトの出力をブラウザに返します。
  
  
   以下にあげる拡張子のファイルについては、標準の MIME タイプを返します:
   .3gp, .apk, .avi, .bmp, .css, .csv, .doc, .docx, .flac, .gif, .gz, .gzip, .htm, .html, .ics, .jpe, .jpeg, .jpg, .js, .kml, .kmz, .m4a, .mov, .mp3, .mp4, .mpeg, .mpg, .odp, .ods, .odt, .oga, .ogg, .ogv, .pdf, .png, .pps, .pptx, .qt, .svg, .swf, .tar, .text, .tif, .txt, .wav, .webm, .wmv, .xls, .xlsx, .xml, .xsl, .xsd, .zip
  
  
   PHP 7.4.0 以降では、ビルトインウェブサーバーに対して複数のリクエストを並列で投げる必要があるテストコードのために、
   複数のワーカーをフォークさせるよう設定できるようになりました。
   サーバーを起動する前に欲しいワーカーの数を PHP_CLI_SERVER_WORKERS 環境変数に設定してください。
  
  注意: 
   この機能は Windows ではサポートされていません。
  
  警告
   
    この機能は 実験的なもの であり、
    本番環境で使うことを意図した機能では ありません。
    ビルトインウェブサーバーは本番環境で使うものではありません。
   
   
  
   例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
 
   
    Windows 環境、かつ PHP 7.4.0 より前のバージョンでは、
    ルーティングを行うスクリプトがシンボリックリンク先の静的なリソースを処理しない限り、
    それらのリソースにアクセスできませんでした。
   
 
  
   例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
 
   
  
   例4 CLI ウェブサーバーを使っているかどうかのチェック
 
  フレームワークのルータースクリプトを、開発中は CLI ウェブサーバーで使って
  その後は本番環境のウェブサーバーでも使うという例です。
<?php
// router.php
if (php_sapi_name() == 'cli-server') {
    /* 静的コンテンツのルーティングをして false を返します */
}
/* 通常の index.php の処理を続きます */
?>
    
   
$ php -S localhost:8000 router.php
 
   
  
   例5 未サポートのファイル形式の処理
 
  CLI ウェブサーバーで対応していない MIME タイプの静的リソースを扱うには、このようにします。
<?php
// router.php
$path = pathinfo($_SERVER["SCRIPT_FILENAME"]);
if ($path["extension"] == "el") {
    header("Content-Type: text/x-script.elisp");
    readfile($_SERVER["SCRIPT_FILENAME"]);
}
else {
    return FALSE;
}
?>
    
   
$ php -S localhost:8000 router.php
 
   
  
   例6 CLI ウェブサーバーへのリモートマシンからのアクセス
 
  ウェブサーバーを、任意のインターフェイスからポート 8000 でアクセスできるようにするには、このようにします。
警告
    
      ビルトインウェブサーバーは、公開ネットワークで使うべきではありません。