PHP 実験室 第一回目 簡単なカウンターを作ろう

記述ソース

01:<?php
02:$file = @fopen("log.cgi","r+") or die("ファイルの読み込み失敗");
03:flock($file, LOCK_EX);
04:$cnt = fgets($file);
05:$cnt++;
06:rewind($file);
07:fputs($file, $cnt);
08:flock($file, LOCK_UN);
09:fclose($file);
10:echo $cnt;
11:?>

表示結果

9987

解説

【02】の処理で、「fopen」の前の「@」(アットマーク)。これは、その式により発生したエラーメッセージは無視してね、って命令です。ですから【02】は、「log.cgi」と言うファイルを「読み込みと書き込み用で」「fopen」し、その内容を「$file」と言う変数に放り込みなさい、と言う命令になります。

目的のファイルを開き、まず行うことは排他処理です。PHP では【03】のように「flock」関数を使用します。ファイルをロックしたら【04】の「fgets」で引数に指定されたファイルポインタから1行だけ読みこみます。もちろん読み込んだ内容は「$cnt」に代入され、【05】でカウントされるというわけです。。

次に【06】の「rewind」関数ですが、これは引数に指定したファイルのポインタを先頭に戻します。なぜこのようなことを行うかと言いますと・・・先ほどこのファイルを読み込んだときにポインタが行末に移りましたよね?同じファイルに書きこむわけですから、ポインタを先頭に戻しておかないと読み込み終わった部分の次から書き込みを行ってしまいます。まぁ、こんなもんだってことを覚えておきましょう。

後は「fputs」関数を使いファイルにカウント済みの数字を書き込み、忘れずに開いたファイルを「fclose」してやります。そしてページ上に訪問者を「echo」してやればめでたく完成、ってことになります。