PHPコーディング

ファイルロック

2008年09月16日
DBではなく、通常のファイルで、データ管理をしていると、ファイルをロックしたくなる場面に遭遇します。
DBが使えると、その辺はDBが処理してくれるので、楽なんですけどね・・・


ファイルをロックするには、まずファイルをオープンして、
$handle = @fopen(ファイルパス, モード);

ロックをかけます
$result = @flock($handle, LOCK_EX);
【LOCK_EX】なら排他的ロック(書き手)
【LOCK_SH】なら共有ロック(読み手)
となります。

ファイルへの書き込みなど処理をして、ロック解除です。
@flock($handle, LOCK_UN);

クローズしても解除されます。
@fclose($handle);


ファイルの中身を読み込んで、処理を行い、変更した内容を同じファイルに上書きしたいので、ファイルを開いたまま中身を全てクリアにする方法を調べてみした。

ファイルクリア
$result = @ftruncate($handle, 0);
ファイルポインタを先頭に持ってくる
$result = @fseek($handle, 0);

でいけます。