PHP - アクセスカウンター

そふぃのPHP入門 ファイルのロック

ファイルのロックはアクセスカウンターや掲示板の書き込み時などに利用するものだそうで。「排他ロック」と「共有ロック」がある。
排他ロックは読み書き両方を1人のユーザーだけしか行えず、その他のユーザーは待機をする状態になる。共有ロックは書きの場合、1人以外は待ちの状態だが、読み込みなら複数でも行えるというもの。(まちがっていたらごめんなさい・・・。^^;)

ファイルのロックはOSの機能だそうで、現在ではほとんどのOSで使用できるそうです。

<?php


$filepath = "counter.txt";//保存用ファイル

$fp = @fopen($filepath, "r+");
@flock($fp, LOCK_EX); //排他ロック
$count = fgets($fp, 10); //10桁分読み取り
$count++;
rewind($fp); //ポインタの位置を最初に戻す
fputs($fp, $count);//書き込み
flock($fp, LOCK_UN);//排他ロックの破棄
fclose($fp);

echo $count;

?>

php rewind (Google検索結果)
ファイルポインタの位置を先頭に戻すという関数だ。ファイルポインタが途中になっていても、rewindを使うことで先頭に戻り、先頭からまた読み込める。任意の位置に移動できるfseek()関数というものがある。

php fseek (Google検索結果)
「例えば、任意の文字を検索してヒットした位置を、第2引数に指定すればそこにファイルポインタが移動するだろう。」

例えば、以下はすべて同じ位置を指す。

<?php

$fp = fopen("test.txt", "r+");
rewind($fp);
fseek($fp, 0);
fseek($fp, 0, SEEK_SET);

?>

@エラー制御演算子と呼ばれるものでその関数がFALSE時のエラーメッセージを意図的に表示させないようにしている。