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