PHP - WEB - 2. Webサーバ

続いてWebアプリケーションの基盤となるWebサーバについて見ていきましょう。Webサーバはファイルシステム上の任意のフォルダを基点にして、Web上にコンテンツを公開するようになっています。この基点となるフォルダのことをドキュメントルート(Document Root)と呼びます。

たとえば次の図に示すように、Webサーバのドキュメントルートに /foo/bar というフォルダを指定した場合は bar フォルダ以下のコンテンツがWeb上に公開されます。

この場合、ドキュメントルートの bar フォルダ以下にある a.phpb.phpc.html はWeb上で公開されるためWebブラウザからアクセスできますが、 d.phpe.html はWeb上に公開されていないためアクセスすることはできません。また bar フォルダをドキュメントルートとしてWebサーバが起動した場合、Webブラウザから a.php にアクセスするには、アドレスバーのURLを次のように入力します。

http://localhost:8000/a.php

もし /foo フォルダをドキュメントルートに指定してWebサーバを起動した場合、 a.phpb.phpc.htmld.phpe.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台のコンピュータ上で動作する複数のサーバプログラムを識別するために使用します。ポート番号には 065535 までの数値が利用可能ですが、 01023 までのポート番号はウェルノウンポート番号と呼ばれ、HTTP( 80 番)やFTP( 20 番、 21 番)、TELNET( 23 番)など有名なプロトコルで利用することが予約されています。そのため開発用のWebサーバを起動するときにはこれらのポート番号は利用せずに 8000 番や 8080 番などの数値を利用することが多いです。

PHPプログラムの開発

ここでは カレントフォルダ( /Users/your_name/Desktop/code-php/ )上に bar というフォルダを作成して、そこに次の2つのファイル( a.phpb.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サーバはドキュメントルート上のコンテンツを公開する