概要

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。

学習目標

ドリル

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

ブラウザで以下を開いて挙動を確認:

採点ランナーは CLI 直実行なので、answer.php の冒頭で stdin から $_SERVER['REQUEST_URI'] を組み立てるスタブ が入っている。Web で動かすときは「stdin が無いので $_SERVER['REQUEST_URI'] を上書きしない」分岐になっていて、本物のリクエスト由来の $_SERVER['REQUEST_URI'] がそのまま使われる。「Web で動かす分にはスタブを消して良い」 という前提のおまじないとして理解する。

演習: ドリル 01 — リクエスト URI で応答を分ける

問題

リクエストされた URI に応じて応答を分ける PHP を書いてください。

採点ランナーは 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 に聞く

  1. 「ch02 — `php -S` 組み込みサーバー / ブラウザで動作確認」のつまずきやすいポイントを、初学者向けに3つ教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

  2. 「ch02 — `php -S` 組み込みサーバー / ブラウザで動作確認」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    💬 ChatGPT 📘 Claude ✨ Gemini

  3. 「ch02 — `php -S` 組み込みサーバー / ブラウザで動作確認」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

🎉 受講お疲れさまでした!

ch02 — `php -S` 組み込みサーバー / ブラウザで動作確認」を読み終えました。
学んだことを誰かに教えると、もっと記憶に残ります。

X で共有 Hatena LINE