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時のエラーメッセージを意図的に表示させないようにしている。