画面を動的(ダイナミック)に作り出す
前回で、Webプログラムの仕組みの概要は理解できたのでは、、、と思います。そこで、ここでは簡単に毎回違う内容を表示するページを作ってみましょう。早速、サンプルを示したいと思います。
01: #!/usr/local/bin/perl
02:
03: # ここで、サーバーから日時の情報を取得します。
04: ($sec,$min,$hour,$day,$mon,$year,$week) = localtime(time);
05: $mon++;
06:
07: # 時間帯によってメッセージを分けるための処理です。
08: $message="Mid night!";
09: if ($hour >= 6){$message="Good morning!";}
10: if ($hour >= 12){$message="Good afternoon!";}
11: if ($hour >= 18){$message="Good evening!";}
12:
13: # ここからHTMLの表示です。
14: print "Content-Type: text/html\n\n";
15: print "<html><head><title>test</title></head>";
16: print "<body>";
17: print "今日は$mon月$day日です。<br>\n";
18: print "今は$hour時$min分です。<br>\n";
19: print "$message";
20: print "</body></html>";
21:
/
22: __END__
*左端の番号は便宜的に付けた行番号です。
プログラムの効率云々を言われるとつらいので、あまり突っ込まないで下さい。ですが、このプログラムを起動すると今日の日付と時刻、そして、時間帯によってメッセージが変わるページを作ることができます。
プログラムの解説 - サーバーの時間を取得
個別にプログラムの解説を簡単にしますと・・・
01:#!/usr/local/bin/perl
これは、前回も書きましたが、Perl本体が置かれているサーバーの場所です。
04: ($sec,$min,$hour,$day,$mon,$year,$week) = localtime(time);
05: $mon++;
timeはPerlの中でも特別な変数で、サーバーの時刻を返してくれます。ただ、timeの中身を表示させてみるとわかるのですが、このままでは人間が読める時間になっていません。正確にはUTC(国際協定時間)である1970年1月1日0時0分0秒からの累積秒数が返されるらしいのです。
これを自分で処理してもいいのですが、Perlで簡単に変換してくれる関数が「localtime()」です。これを更に、$sec=秒 $min=分 $hour=時 $day=日 $mon=月 $year=年 $week=曜日 ・・・というそれぞれの変数に格納します。ただ、なぜか月についてはカレンダーよりも1だけ少ない数字になるので、すぐあとに、 $mon++; と1足しています。( $mon++ とは $mon = $mon + 1; の省略系です。)
ここからが、実際に書き出されるHTMLとなります。
14行目の「Content-Type」は前回でましたが、ヘッダー情報として必要でしたよね?これに続いて、HTMLの文法どおり、普段書いているような形式で書き出します。
14: print "Content-Type: text/html\n\n";
15: print "<html><head><title>test</title></head>";
16: print "<body>";
17: print "今日は $mon 月 $day 日です。<br>\n";
18: print "今は $hour 時 $min 分です。<br>\n";
ただ、17行目を見ると、「print "今日は $mon 月 $day 日です。<br>\n";」となっており、print命令の中に、先ほどの時間を格納した変数が入っています。これが、表示されるときには、展開されて、今日の日付として書き出されます。たとえば、$mon = 10 , $day = 3 だとすると、画面上は「今日は10月3日です。」と表示されます。
ほとんどのプログラムでは、このようにして処理結果をHTML形式で表示させているんですね。
ここからが、動的(ダイナミック)に表示が変わる部分です。
08: $message="Mid night!";
09: if ($hour >= 6){$message="Good morning!";}
10: if ($hour >= 12){$message="Good afternoon!";}
11: if ($hour >= 18){$message="Good evening!";}
・・・
19: print "$message";
20: print "</body></html>";
最終的には「print "$message"」で表示をするのですが、その内容が、先ほどの時間 $hour によって変わります。結果として、
- 0時~6時には「Mid night!」
- 6時~12時には「Good morning!」
- 12時~18時には「Good afternoon!」
- 18時~24時には「Good evening!」
というように、時間に応じて表示を替えることができます。簡単ですね。
今回のサンプルプログラム
実際のサンプルを動かしているので、「こちら」をクリックしてみてください。(別窓)





