PHP MEMO | What's New | About This Site


ファイルハンドルを伴わないファイル関数の排他制御(flock)

同時に複数の読み書きが行われる可能性のあるファイルには、 何らかの方法で排他制御(ロック)を行う必要があります。 PHPには flock というファイルロック関数がありますが、 file などのファイルハンドルを伴わないファイル関数には直接適用することが出来ません。 このような場合、下記に示すような方法で排他制御を行うことが出来ます。

<?
$LOCK = fopen('./lock.txt','w'); // 排他的ロックを行う為、ダミーファイルを書きこみ用でオープン。
flock($LOCK, 2); // ←ここでロック権がとれない場合、この先の処理へは進めない。

/* 実際のファイル操作はここで行う。 
   この部分での排他制御処理は不要。*/

flock($LOCK, 3);
fclose($LOCK);
?>

lock.txt は、排他制御専用のダミーファイルなので中身が空でも構いません。要は、実際に読み書きするファイルにロックをかけるのではなく、共通のロック専用ファイルにロックをかけることにより排他制御を行うということです。上記赤字部分でファイル操作を行う場合、更なる排他制御処理の記述は必要ありません。

2003/01/23



PHP MEMO | What's New | About This Site


Copyright (c) 2003, 2004 Synonym, All Rights Reserved.



テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル