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
まず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サーバはドキュメントルート上のコンテンツを公開する