PHP - WEB - 7. HTTPレスポンス

続いてHTTPレスポンスについて見ていきましょう。HTTPレスポンスはHTTPリクエストを受信したWebサーバがWebブラウザに応答するデータです。HTTPレスポンスもリクエスト同様にステータスライン、ヘッダフィールド、ボディパート、計3つのパートで構成されています。PHPプログラムで生成するHTMコンテンツはこのボディパートに含まれることになります。

PHPプログラムの開発(ユーザ一覧画面)

それでは実際にプログラムを作りながらHTTPレスポンスについて学習していきましょう。ここでは事前に用意しておいた外部ファイル( users.csv )からデータを読み込んで表形式で表示するユーザ一覧画面( users.php )を作成します。

まずはテキストエディタを開いて以下の内容でCSVファイル( users.csv )を準備しておきましょう。

1,Andy,20
2,Betty,22
3,Carol,19

次にPHPプログラム( users.php )を作成します。

<?php
$handle = fopen("users.csv", "r");
$users = [];
while(($line = fgetcsv($handle)) !== false) {
  $users[] = $line;
}
fclose($handle);
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>PHP Sample</title>
</head>
<body>
  <h3>Users</h3>
  <hr>
  <table border="1">
    <tr>
      <th>NO</th>
      <th>NAME</th>
      <th>AGE</th>
    </tr>
  <?php
    for ($i = 0; $i < count($users); $i++) {
  ?>
    <tr>
      <td><?php echo $users[$i][0] ?></td>
      <td><?php echo $users[$i][1] ?></td>
      <td><?php echo $users[$i][2] ?></td>
    </tr>
  <?php
    }
  ?>
  </table>
</body>
</html>

ここではCSVファイルの読み込み時に fgetcsv 関数を使っています。 fgetcsv 関数は カンマ , で区切られた文字列データを配列に変換して取得します。たとえばCSVファイルから以下の1行を読み込むとしましょう。

1,Andy,20

この場合 fgetcsv 関数は次のような配列データに変換します。

["1", "Andy", "20"]

つまり今回のプログラムでは以下に示すPHPプログラムの先頭部分の処理が終了した時点で、

<?php
$handle = fopen("users.csv", "r");
$users = [];
while(($line = fgetcsv($handle)) !== false) {
  $users[] = $line;
}
fclose($handle);
?>

変数 $users は次のような2次元配列データになります。

$users = [["1", "Andy", "20"],
          ["2", "Betty", "22"],
          ["3", "Carol", "19"]];

さいごにHTMLの出力部分で $users 変数 の内容を出力します。

  <?php
    for ($i = 0; $i < count($users); $i++) {
  ?>
    <tr>
      <td><?php echo $users[$i][0] ?></td>
      <td><?php echo $users[$i][1] ?></td>
      <td><?php echo $users[$i][2] ?></td>
    </tr>
  <?php
    }
  ?>

$users には2次元配列が代入されているので、要素にアクセスするには $users[$i][0] のように2つの要素番号を指定する必要があります。この結果PHPは次のようなHTMLを生成することになります。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>PHP Sample</title>
</head>
<body>
  <h3>Users</h3>
  <hr>
  <table border="1">
    <tr>
      <th>NO</th>
      <th>NAME</th>
      <th>AGE</th>
    </tr>
      <tr>
      <td>1</td>
      <td>Andy</td>
      <td>20</td>
    </tr>
      <tr>
      <td>2</td>
      <td>Betty</td>
      <td>22</td>
    </tr>
      <tr>
      <td>3</td>
      <td>Carol</td>
      <td>19</td>
    </tr>
  </table>
</body>
</html>

それでは実際にプログラムを実行してみましょう。まずはビルトインWebサーバを起動します。

$ php -S localhost:8000

続いてWebブラウザからユーザ一覧画面 users.php にアクセスします。アドレスバーに以下のURLを入力します。

http://localhost:8000/users.php

そうすると次のような一覧画面が表示されるでしょう。

このようにWebアプリケーションを開発する際にはWebブラウザに表示される結果(主にHTML)に注目することになります。しかし実際にはWebサーバからの応答データであるHTTPレスポンスにはHTMLコンテンツ以外にもステータスラインやヘッダフィールドといった情報が含まれています。以降は引き続きHTTPレスポンスの詳細について学習していきましょう。

まとめ

  • HTTPレスポンスとはWebサーバからWebブラウザへの応答データ
  • HTTPレスポンスもHTTPリクエストと同様に3つのパートに分かれる
  • PHPによって生成されたHTMLコンテンツはHTTPレスポンスのボディパートに格納される