いきなり困難とかいってしまっているが、別にこれまでの改造に比べてとりわけ難しいことをしようというわけではない。単純に、前回に簡単編という名前を付けてしまったから、その対義語として困難を持ってきただけで、深い意味があるわけではないのだ。
ただ、今回の改造はログファイルの構造を変更してしまう。具体的にいえば、一言メッセージの書き込まれるファイル、mes.datの構造が変わる。だから、それまでのmes.datを消去し、新たに空っぽのmes.datを作成する必要がある。
そんなわけで、今回の改造を誤ると、ちょっと困ったことになってしまいかねない。あんまりよくわからないという人は手を出さないほうが無難だろう。よくよく熟考の上、採用するしないを決めていただきたい。
今回の改造は、前回と同じく一言メッセージが書き込まれた時刻を、分秒まで記録するようにしようというもの。改造対象は前回同様clap.cgiとkaiseki.cgiのふたつであり、そしてこの改造によってmes.datが影響を受ける。改造cgiをアップロードするのと同じタイミングで、それまでのmes.datを削除するようにしてほしい。
今回の改造をおおまかに説明すると、前回にも紹介したふたつのやり方のうち、ログファイルを改変するという方法を採用する。前回に採用したのがプランBだとすれば、今回採用するのは、プランAである。
前回は、デフォルトでは時だけが記録される箇所に分も秒も書き込んでしまうというやり方だったが、今回は分と秒のために専用の場所を確保してやる。ログファイルは要素を<>で区切っているから、分秒のために新しく仕切りの<>をふたつ増やすということだ。
clap.cgiにおける変更箇所は一点。前回と同じ118行目である。
#---------------------------------------一言メッセージ処理
if ($hitokoto ne ''){
$mesdata = "$getdate<>$tohour<>$hitokoto<>\n";
とあるのを、
#---------------------------------------一言メッセージ処理
if ($hitokoto ne ''){
$mesdata = "$getdate<>$tohour<>$min<>$sec<>$hitokoto<>\n";
と書き換える。clap.cgiの変更は以上だ。
kaiseki.cgiの改変は、clap.cgiの改造に伴うログファイルの変更に対応させるということが一点。二点目は、ログファイルから取り出した分秒のデータを表示に反映にさせるための改変である。
まずは、ログファイルの変更への対応から行おう。変更箇所は、kaiseki.cgiの120行目だ。
#----------------------メッセージ表示
print "今日送られたメッセージ<br>\n";
print "<table border>\n";
for ($i=0 ; $i<=$#mes ; $i++){
($mesday,$meshour,$message) = split(/<>/,$mes[$i]);
$mesdayに日付データ、$meshourに時刻データ、$messageに一言メッセージをそれぞれセットしようとするのだが、改変されたログファイルからだと、$messageに分が入ってしまい一言メッセージが表示されなくなってしまう。だから、分と秒のための入れ物(変数)をそれぞれ用意してやらないといけない。
私は、分と秒の変数を用意する際に、時刻の変数の名前$meshourを参考にして$mesmin、$messecとしてみた。この名前はそれぞれ各自で自由に決められるのがよいだろう。
さて、実際の改造は以下のようになる。
#----------------------メッセージ表示
print "今日送られたメッセージ<br>\n";
print "<table border>\n";
for ($i=0 ; $i<=$#mes ; $i++){
($mesday,$meshour,$mesmin,$messec,$message) = split(/<>/,$mes[$i]);
上記の改造により、変数$mesmin、$messecに分と秒のデータがセットされるようになった。だが、これだけではもちろん表示に反映されないので、表示に関する箇所を変更してやらないといけない。変更箇所はkaiseki.cgiの122行目だ。
print "<td><p align=\"right\">$meshour時</p></td>\n";
これを、次のようにしてやるとよいだろう。
print "<td><p align=\"right\">$meshour:$mesmin:$messec</p></td>\n";
ちなみに、コロン(:)は時分秒の区切り文字。これを何時何分何秒と表示したい場合は、次のようにする。
print "<td><p align=\"right\">$meshour時$mesmin分$messec秒</p></td>\n";
表示させ方にはいろいろあると思うので、それぞれ工夫されるとよいと思うが、シンプルにコロン区切りくらいにとどめておいたほうがいいんじゃないかと思う。
< web拍手改造:一言メッセージの書き込み時刻を記録する 簡単編 web拍手改造文書における誤りとその修正 >