概要
PHP には php -S localhost:8000 という 組み込みの Web サーバー が標準で付いている。Apache や Nginx を別途入れずに、コマンド 1 発でローカルに Web サーバーが立ち、ブラウザから自作の PHP にアクセスできる。学習・開発用として最高に手軽で、本番運用は別物 (Apache/Nginx + PHP-FPM) と覚えておけばよい。
起動時の 2 つ目の引数として ルーター用の PHP ファイル を渡せる。このルーターが全リクエストを受け取り、$_SERVER['REQUEST_URI'] (今アクセスされている URL のパス) を見て応答を分岐させる。/hello なら挨拶、それ以外は 404、という世界一小さな Web アプリがここで書ける。
このチャプターのドリルは、CLI 採点ランナー上で動かすために $_SERVER['REQUEST_URI'] を stdin から組み立てるスタブ が冒頭に入る。php -S で動かすときはスタブが効かず本物のリクエスト由来の値が使われる、という二重構造。「採点用のおまじない」として読み飛ばして OK。
学習目標
php -S localhost:8000で PHP 組み込みの Web サーバー を立てられる- ブラウザで
http://localhost:8000/...を開いて自作 PHP を表示できる - リクエストの パス (
$_SERVER['REQUEST_URI']) で応答を分けられる
ドリル
| no | 内容 |
|---|---|
| 01 | リクエストパスが /hello なら "Hello, Web!"、それ以外なら "404" を出力 |
本物の動作確認 (任意・推奨)
実際にブラウザでも動かしてみたい場合:
# ドリルの answer.php がある場所に行く
cd topics/web/ch02-builtin-server/drill/01-respond-text/
# 組み込みサーバー起動 (Ctrl+C で停止)
php -S localhost:8000 answer.php
ブラウザで以下を開いて挙動を確認:
http://localhost:8000/hello→Hello, Web!http://localhost:8000/nope→404
採点ランナーは CLI 直実行なので、answer.php の冒頭で stdin から $_SERVER['REQUEST_URI'] を組み立てるスタブ が入っている。Web で動かすときは「stdin が無いので $_SERVER['REQUEST_URI'] を上書きしない」分岐になっていて、本物のリクエスト由来の $_SERVER['REQUEST_URI'] がそのまま使われる。「Web で動かす分にはスタブを消して良い」 という前提のおまじないとして理解する。
📝 演習: ドリル 01 — リクエスト URI で応答を分ける
問題
リクエストされた URI に応じて応答を分ける PHP を書いてください。
$_SERVER['REQUEST_URI']が"/hello"のとき →"Hello, Web!"を 1 行出力- それ以外のとき →
"404"を 1 行出力
採点ランナーは CLI 直実行なので、標準入力の 1 行目 を $_SERVER['REQUEST_URI'] に代入してから処理してください (スタブはコードに含めて構いません)。
このドリルの入力例:
/hello
期待される出力:
Hello, Web!ヒント
$_SERVER['REQUEST_URI'] = trim(fgets(STDIN) ?: '');
if ($_SERVER['REQUEST_URI'] === '/hello') { ... } else { ... }本物の Web で確認したい場合
cd topics/web/ch02-builtin-server/drill/01-respond-text/
php -S localhost:8000 answer.php
ブラウザで http://localhost:8000/hello / http://localhost:8000/other を開く。
🤖 この章を AI に聞く
-
「ch02 — `php -S` 組み込みサーバー / ブラウザで動作確認」のつまずきやすいポイントを、初学者向けに3つ教えてください
-
「ch02 — `php -S` 組み込みサーバー / ブラウザで動作確認」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)
-
「ch02 — `php -S` 組み込みサーバー / ブラウザで動作確認」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください