/*
*lock_thisfile: 排他的ロックを取得します
*@param $tmpFileStr は共有ロックファイルとして使用されるファイル名です (任意の名前を付けることができます)
*@param $locktype ロック タイプ、デフォルトは false (非ブロッキング、つまり、ロックが失敗すると直接 false を返します)。true に設定すると、ロックが成功するまで待機してから戻ります
。
*@return ロックが成功した場合は、ロック インスタンスが返されます (unlock_thisfile メソッドを使用する場合、このパラメーターは必須です)。ロックが失敗した場合は、false が返されます。
*/
function lock_thisfile($tmpFileStr,$locktype=false){
if($locktype == false)
$locktype = LOCK_EX|LOCK_NB;
$can_write = 0;
$lockfp = @fopen($tmpFileStr.".lock","w");
if($lockfp){
$can_write = @flock($lockfp,$locktype);
}
if($can_write){
$lockfp を返します;
}
他{
if($lockfp){
@fclose($lockfp);
@unlink($tmpFileStr.".lock");
}
false を返します;
}
}
/**
*unlock_thisfile: 以前に取得したロック インスタンスのロックを解除します
*@param $fp lock_thisfileメソッドの戻り値
*@param $tmpFileStr は共有ロックファイルとして使用されるファイル名です (任意の名前を付けることができます)
*/
関数unlock_thisfile($fp,$tmpFileStr){
@flock($fp,LOCK_UN);
@fclose($fp);
@fclose($fp);
@unlink($tmpFileStr.".lock");
}
?>
//使用例
$tmpFileStr = "/tmp/mylock.loc";
// 操作権限が取得されるのを待ちます。すぐに戻りたい場合は、第 2 パラメータを false に設定します。
$lockhandle = lock_thisfile($tmpFileStr,true);
if($ロックハンドル){
// 排他的である必要があるすべてのトランザクション処理はここで実行されます。
// ... ...
// トランザクションが完了しました。
lock_thisfile($lockhandle,$tmpFileStr);
}
?>