//書き込みバッファを0にする。
通常、ファイルの書き込みには、バッファと呼ばれるところに一時的に書き込み、ある程度溜まったところで、ファイルに書き込むという動作をするので、バッファにある値と実際のファイルの値が異なる瞬間が存在する。
//汎用ファイルをロックする。
operationを指定することにより、ロックすることもできる。
$fp = @fopen("/tmp/counter", "r+");
// ファイルがなかった場合、ファイルを作る。
if( !$fp ) {
$fp = fopen("/tmp/counter", "w");
}// バッファとファイルの差異を0にする。
set_file_buffer($fp, 0);//ファイルを排他ロック
flock($fp, LOCK_EX);
//ファイルポインタを先頭へ
rewind($fp);
$buf = fgets($fp, 1000000);
if( !$buf ) {
$buf = 1;
} else {
$buf++;
}
//ファイルポインタを先頭へ
rewind($fp);
fputs($fp, $buf);
//ロック解除
flock($fp, LOCK_UN);
fclose($fp);
参照・引用:スタックアスタリスク

コメントする