10日でおぼえるPHP5入門教室 第2日

2時限目 ヘッダ情報の話

list_header.php
ループを回して"HTTP_USER_AGENT","HTTP_ACCEPT_LANGUAGE","HTTP_REFERER"を表示する、というスクリプト
PHPの部分とHTMLの部分がごちゃ混ぜになっていて、なんだかすごく違和感を感じる。
10行目でforeachループが始まって、11行目の?>でPHPスクリプト部分は一旦終わってるのに、その後のHTML文まで律儀に3回実行されるなんて。
本当かと思って

<html>
<head>
<title>ループのテスト</title>
</head>
<body>
<?php
for($i=0;$i<3;$i++){
?>
<p>This is a pen.</p>
<?php
}
?>
</body>
</html>

というスクリプトをブラウザで実行したら、This is a pen.が3回表示された。
なんだこの癒着。

と、書いたところで晩御飯を買いに出かけた。
マルエツに向かって歩いていたら、「あ、だから拡張子がhtmlじゃなくてphpなんだ」と思った。
list_header.phpの、<?phpタグの外側に書いていたHTMLは、HTMLじゃなくて「HTMLのようなもの」「<?php print(" 〜 "); ?>が省略されたPHPの文」なんだ。まずPHPのルールで全体が解釈されて、その結果がApacheに渡されるんだ、たぶん。

ためしに上のスクリプト拡張子phpからhtmlに変えてみたら、This is a pen.は1回だけ表示された。なるほど。腑に落ちた。*1でも、わかりにくいなー。

3時限目 クッキーの話

  • setcookie関数
  • $_COOKIE変数

*1:これは違う、と後でわかった。拡張子がhtmlだと、PHP文はまったく解釈されないから