web拍手の改造、前回までは主にお礼メッセージ画面に関する改造を中心にしてきたわけだが、今回はちょっと趣向を変えて、利用者にはあまり関係のない、裏側について考えてみようと思う。
web拍手の解析ページでは送られた一言メッセージを確認することができるのだが、ここで見ることができるのは一言メッセージが何時に送られたかということと一言メッセージのみ。非常に簡潔にできていて、つまり書き込みが何時に行われたということはわかっても、何分だとか何秒だとかがわからないのだ。
まあ、うちみたいにめったに一言メッセージがこないサイトでは、例えその書き込みが何時何分何秒に行われたかなんてまったく意味がないのだが、たくさんのメッセージを受け取る人気サイトなんかでは、もう少し細かい書き込み時刻がわかったほうがよいという向きもあるだろう。
今回の改造は、clap.cgiとkaiseki.cgiのふたつが対象。clap.cgiではログファイルに時分秒が書き込まれるように、そしてkaiseki.cgiでは表示の不都合をなくすのが目的だ。
clap.cgiで、一言メッセージの記録が行われるのはどこかというと、115行目一言メッセージ処理というコメントから始まる数行の間である。具体的にログファイルを操作しているのは120行目から122行目にかけてなのだが、問題となるのはその書き込む内容を準備している118行目である。
#---------------------------------------一言メッセージ処理
if ($hitokoto ne ''){
$mesdata = "$getdate<>$tohour<>$hitokoto<>\n";
$mesdataという変数に、一言メッセージの送られた日($getdate)、時刻($tohour)、そして一言メッセージ($hitokoto)が書き込まれている。
この、二つ目の時刻を書き込んでいるところに、分と秒を加えてやりたい。しかし、それはどうしたらいいのだろうか。
実をいうと、書き込み日や時刻を取得する際に、一緒に分や秒も取得されているのである。その箇所はどこかというと、clapinit.cgiの80行目、日付取得というコメントから始まるサブルーチンdateloadにおいてである。具体的に時刻分秒等が取り出されているのは86行目だ。
($sec,$min,$tohour,$today,$tomon,$toyear,$wday,$yday,$isdst) = (localtime(time-$day*86400));
括弧内に連続して表記されている変数群を見れば、確かに先ほど時刻として確認した変数$tohourがあることがわかるだろう。そしてその周辺を見れば、秒や分もある。そう、$secと$minだ。
このふたつの変数はそのまま使うことができる。つまり、clap.cgiで一言メッセージ処理が行われる際に、ログへの記録対象として利用できるのだ。
ここでやり方はふたつある。ひとつは、<>を区切り文字として一連のデータが記録されているログを大幅に改変するやり方、――区切りを追加して、時、分、秒をそれぞれ別々に記録する方法。もうひとつは、今、時が記録されているところに分も秒も一緒に記録しようというもの。
簡単なのは、プランBである。今回は、このプランBを採用することにしよう。
時分秒を記録するとして、問題なのはそれぞれをわける区切り文字だ。例えば、何時何分何秒と書く方法があるし、あるいはシンプルにコロン(:)で区切る方法がある。私は今回はコロンで区切ってみようと思う。
#---------------------------------------一言メッセージ処理
if ($hitokoto ne ''){
$mesdata = "$getdate<>$tohour:$min:$sec<>$hitokoto<>\n";
これで、メインの改造は終了だ。こうしてやることで、ログファイルには一言メッセージの書き込み時分秒が記録される。ついでにいえば、kaiseki.cgiを直さなくても不都合はない。
kaiseki.cgiを変更する理由はささいなもので、ただの表示上の問題を気にするか気にしないかだけのことである。表示上の問題とはなにかといえば、解析ページを開いた際に表示される一言メッセージの表の時間の部分に、時という文字が書き込まれるということだけ。つまり、これまでなら、例えば8時15分45秒に書き込まれたメッセージなら8時と表記されていたのが、これからは8:15:45時と表示されるようになりますよということ。気にする? 私は、別に人に見せるページじゃないから気にする必要もないと思うのだが、気になる人もいるだろうから一緒に直してしまおう。
ここで直す箇所はというと、kaiseki.cgiの122行目だ。
print "<td><p align=\"right\">$meshour時</p></td>\n";
ここに、時という文字が見えるだろう。つまりは、こいつを削除してやればよいのだ。
print "<td><p align=\"right\">$meshour</p></td>\n";
これで、8:15:45時という不細工な表示はされなくなる。
< web拍手改造:これまでのまとめと整理 その二 web拍手改造:一言メッセージの書き込み時刻を記録する 困難編 >