PHP - WEB - 2. Webサーバ
続いてWebアプリケーションの基盤となるWebサーバについて見ていきましょう。Webサーバはファイルシステム上の任意のフォルダを基点にして、Web上にコンテンツを公開するようになっています。この基点となるフォルダのことをドキュメントルート(Document Root)と呼びます。
たとえば次の図に示すように、Webサーバのドキュメントルートに /foo/bar というフォルダを指定した場合は bar フォルダ以下のコンテンツがWeb上に公開されます。

この場合、ドキュメントルートの bar フォルダ以下にある a.php 、 b.php 、 c.html はWeb上で公開されるためWebブラウザからアクセスできますが、 d.php 、 e.html はWeb上に公開されていないためアクセスすることはできません。また bar フォルダをドキュメントルートとしてWebサーバが起動した場合、Webブラウザから a.php にアクセスするには、アドレスバーのURLを次のように入力します。
http://localhost:8000/a.php
もし /foo フォルダをドキュメントルートに指定してWebサーバを起動した場合、 a.php 、 b.php 、 c.html 、 d.php 、 e.html すべてにアクセス可能です。また foo フォルダをドキュメントルートとしてWebサーバが起動した場合、Webブラウザから a.php にアクセスするには、アドレスバーのURLを次のように入力します。
http://localhost:8000/bar/a.php

この場合、URLの一部に bar というフォルダ名が含まれることに注意してください。このようにURLにおいて、ドキュメントルート以下のパスを指定してアクセスします。
アドレスとポート番号
PHPのビルトインWebサーバを起動するとき localhost:8000 番のようにアドレスとポート番号を指定します。ここでいうアドレスとはネットワーク上のコンピュータを識別するためのものでホスト名やIPアドレスを指定します。 一般的にはアドレスに localhost と指定した場合はネットワーク上のコンピュータ自身(通常は 127.0.0.1 )を示すことになります。
またアドレスの後の : に記述する番号をポート番号と呼びます。ポート番号は1台のコンピュータ上で動作する複数のサーバプログラムを識別するために使用します。ポート番号には 0 〜 65535 までの数値が利用可能ですが、 0 〜 1023 までのポート番号はウェルノウンポート番号と呼ばれ、HTTP( 80 番)やFTP( 20 番、 21 番)、TELNET( 23 番)など有名なプロトコルで利用することが予約されています。そのため開発用のWebサーバを起動するときにはこれらのポート番号は利用せずに 8000 番や 8080 番などの数値を利用することが多いです。
PHPプログラムの開発
ここでは カレントフォルダ( /Users/your_name/Desktop/code-php/ )上に bar というフォルダを作成して、そこに次の2つのファイル( a.php 、 b.php )を配置するものとします。
- <カレントフォルダ>
- bar
- a.php
- b.php
- bar
まず1つ目の a.php ファイルです。
<?php
$title = "A PAGE";
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHP Sample</title>
</head>
<body>
<h1><?php echo $title; ?></h1>
</body>
</html>
このプログラムでは先頭部分で $title 変数 に "A PAGE" という文字列データを代入し、 h1 タグの中で $title 変数の内容を出力しています。
続いて b.php ファイルです。
<?php
$title = "B PAGE";
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHP Sample</title>
</head>
<body>
<h1><?php echo $title; ?></h1>
</body>
</html>
さきほどの a.php ファイルとほとんど同じで先頭部分で $title 変数に代入する文字列データを "B PAGE" に変更しています。2つのファイルを作成したらビルトインWebサーバを起動してみましょう。
$ php -S localhost:8000
上記のコマンドを実行すると、phpコマンドを入力した際のカレントフォルダがドキュメントルートとして公開されます。このときカレントフォルダが /Users/your_name/Desktop/code-php である場合、Webブラウザから code-php フォルダ以下のコンテンツにアクセスできます。
またここではアドレスに localhost 、ポート番号に 8000 を指定しているので、Webブラウザのアドレスバーから次のように入力することで a.php にアクセスできます。
http://localhost:8000/bar/a.php
URLの一部に bar フォルダが含まれている点に注意してください。ここでは code-php フォルダをドキュメントルートに指定しているため、 a.php にアクセスするには bar フォルダを経由する必要があります。正しくアクセスできると次のような結果が表示されるでしょう。

また同様に b.php にアクセスする場合も次のようになります。
http://localhost:8000/bar/b.php

次にコマンドラインでビルトインWebサーバを一度停止( ctrl + c とタイプ)してから、改めて次のように -t オプションを指定して php コマンドを入力します。
$ php -S localhost:8000 -t bar
この -t オプションはドキュメントルートを指定するためのものです。この場合、カレントフォルダ( /Users/your_name/Desktop/code-php )からの相対パス指定になるので /Users/your_name/Desktop/code-php/bar フォルダがドキュメントルートになります。
ブラウザから a.php にアクセスするには次のように入力します。
http://localhost:8000/a.php
URLから bar というフォルダ名が不要になった点に注意してください。正しくアクセスできると次のような結果が表示されるでしょう。

また同様に b.php にアクセスする場合も次のようになります。
http://localhost:8000/b.php

まとめ
- HTTPリクエストを処理し、HTTPレスポンスを返却する
- Webサーバは通常80番ポートを使うが、開発時は8000番などのポート番号を利用する
- Webサーバはドキュメントルート上のコンテンツを公開する