簡単なカウンターの作成(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します。