PHP - WEB - 2. Webサーバ

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

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

Cloud9を利用する場合は、図の http://localhost:8080/ の部分が https://〜.vfs.cloud9.ap-northeast-1.amazonaws.com/ となります。

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

https://〜.vfs.cloud9.ap-northeast-1.amazonaws.com/a.php

もし /foo フォルダをドキュメントルートに指定してWebサーバを起動した場合、 a.phpb.phpc.htmld.phpe.html すべてにアクセス可能です。また foo フォルダをドキュメントルートとしてWebサーバが起動した場合、Webブラウザから a.php にアクセスするには、アドレスバーのURLを次のように入力します。

https://〜.vfs.cloud9.ap-northeast-1.amazonaws.com/b.php

この場合、URLの一部に bar というフォルダ名が含まれることに注意してください。このようにURLにおいて、ドキュメントルート以下のパスを指定してアクセスします。

アドレスとポート番号

PHPのビルトインWebサーバを起動するとき localhost:8080 番のようにアドレスとポート番号を指定します。ここでいうアドレスとはネットワーク上のコンピュータを識別するためのものでホスト名やIPアドレスを指定します。 一般的にはアドレスに localhost と指定した場合はネットワーク上のコンピュータ自身(通常は 127.0.0.1 )を示すことになります。

Cloud9 上でビルトインWebサーバを起動すると動作確認用の特別なURL( https://〜.vfs.cloud9.ap-northeast-1.amazonaws.com/web1.php )を使ってブラウザからアクセスできます。このURLは Cloud9 のプレビューボタンから起動すると確認できます。

またアドレスの後の : に記述する番号をポート番号と呼びます。ポート番号は1台のコンピュータ上で動作する複数のサーバプログラムを識別するために使用します。ポート番号には 065535 までの数値が利用可能ですが、 01023 までのポート番号はウェルノウンポート番号と呼ばれ、HTTP( 80 番)やFTP( 20 番、 21 番)、TELNET( 23 番)など有名なプロトコルで利用することが予約されています。そのため開発用のWebサーバを起動するときにはこれらのポート番号は利用せずに 8080 番や 8000 番などの数値を利用することが多いです。

Cloud9 上では ビルトインWebサーバは8080番ポートで起動する必要があります。

PHPプログラムの開発

ここでは カレントフォルダ( /home/ec2-user/environment )上に 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" に変更しています。

ここまでで Cloud9 上に、以下のようにフォルダおよびファイルが作成されていれば大丈夫です。

2つのファイルを作成したらビルトインWebサーバを起動してみましょう。

$ php -S localhost:8080

上記のコマンドを実行すると、phpコマンドを入力した際のカレントフォルダがドキュメントルートとして公開されます。このときカレントフォルダが /home/ec2-user/environment である場合、Webブラウザから environment フォルダ以下のコンテンツにアクセスできます。

Webブラウザのアドレスバーから次のように入力することで a.php にアクセスできます。

https://〜.vfs.cloud9.ap-northeast-1.amazonaws.com/bar/a.php

参考: Cloud9 を使わずにローカル(自分のパソコン)で開発している場合は http://localhost:8080/bar/a.php でアクセスできます。Cloud9 で開発する場合は動作確認用のURLが特殊なものになります。

URLの一部に bar フォルダが含まれている点に注意してください。ここでは /home/ec2-user/environment フォルダをドキュメントルートに指定しているため、 a.php にアクセスするには bar フォルダを経由する必要があります。正しくアクセスできると次のような結果が表示されるでしょう。

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

https://〜.vfs.cloud9.ap-northeast-1.amazonaws.com/bar/b.php

次にターミナルでビルトインWebサーバを一度停止( ctrl + c とタイプ)してから、改めて次のように -t オプションを指定して php コマンドを入力します。

$ php -S localhost:8080 -t bar

この -t オプションはドキュメントルートを指定するためのものです。この場合、カレントフォルダ( /home/ec2-user/environment )からの相対パス指定になるので /home/ec2-user/environment/bar フォルダがドキュメントルートになります。

ブラウザから a.php にアクセスするには次のように入力します。

https://〜.vfs.cloud9.ap-northeast-1.amazonaws.com/a.php

URLから bar というフォルダ名が不要になった点に注意してください。正しくアクセスできると次のような結果が表示されるでしょう。

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

https://〜.vfs.cloud9.ap-northeast-1.amazonaws.com/b.php

まとめ

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