簡単なカウンターの作成(fopen,fgets,fputs,ftruncate,rewind,fclose)

まず、簡単なアクセスカウンターを作成します。

<?php
//カウント情報の保存ファイル
$countfile = "cnt.dat";

$fp = @fopen($countfile,"r");
$cnt = fgets($fp);
fclose($fp);

$cnt = $cnt + 1;

$fp = @fopen($countfile,"w");
fputs($fp, $cnt);
fclose($fp);
print $cnt
?>

まず、カウントアップした値を保存するファイル名を変数に入れています。

このファイルをfopen()関数でopenします。このfopen()関数は
上記例の場合、カウント値をファイから読み出す場合と書き込む場合に使用しています。
openに成功するとファイルハンドル(ファイルポインタ)が得られます。

ファイルの内容を読み込むのにfgets()関数を使用しています。
fgets()関数は、引数のファイルポインタから、指定バイト数-1を読み出します。
上記例では、、「指定バイト数-1」の部分を省略しています。この場合、デフォルトは1kまた は1024バイト
を指定したことになります。

fgets()の読み出しは、length-1バイト読み出したか、(返り値 に含まれる)改行文字を検出したか、
EOFに達したかのいずれかが起こった時点で終了します。

fopen()関数でopenしたファイルは、fclose()関数で閉じます。

読み出した値は、$cntに格納され $cnt = $cnt + 1 でカウントアップしています。

次に、カウントアップした値をファイルに書き戻します。
書き戻す場合、ファイルモードを"w"(書き込み用)に指定しopenします。
ファイルに値を書き込むには、fputs()又はfwrite()関数を使用します。

あとは、openしたファイルをcloseしてprintで出力します。

別の方法も紹介します。

<?php
//カウント情報の保存ファイル
$countfile = "cnt.dat";

$fp = @fopen($countfile,"r+");
$cnt = fgets($fp);
$cnt = $cnt + 1;

ftruncate($fp,0);
rewind($fp);

fputs($fp, $cnt);
fclose($fp);
print $cnt;
?>

上記例の場合、ファイルのopenは1回で行われています。また、ファイルモードが"r+"(読み書き用)で
openされています。
カウント値を読み出すまでは、前の例と同じですね。

前の例ででてこなかったftruncate()関数が登場します。この関数でもともと入っていた値を消去します。
このftruncate()関数は、ファイルを指定した長さに丸める関数です。この場合、長さ0を指定しています。

次のrewind()関数で、ファイルポインタを先頭にしています。

これで、カウントアップした値を書き込む準備ができます。
あとは、fputs関数で書き込んでファイルをcloseします。