ファイルをロック - flock()
当ページのリンクには広告が含まれています。
プログラミング言語PHPで、開かれているファイルをロックする関数 flock()を紹介します。
他のプロセスがファイルを変更するのを防ぎます。複数のプロセスからファイルアクセスがある場合は、この関数を使って必ずファイルをロックしておきましょう。
flock関数
bool flock ( resource $handle , int $operation )
指定したファイルポインタのファイルをロックします。
引数 $handle ロックするファイルのファイルポインタを指定します。 $operation ロックモードを指定します。ロックモードについては後述します。
返り値
指定したロックモードへファイルを処理できれば trueを、失敗すれば falseを返します。
ロックモード
ファイルを開く際のモード一覧表です。モードの「概要」「ファイルポインタの位置」「ファイルがない場合」についての挙動を紹介しています。
| ロックモード | 概要 |
|---|---|
| LOCK_SH | 共有ロック。ほかのプロセスの読み取りは可、書き込みは不可。 |
| LOCK_EX | 排他ロック。読み取り/書き込みともに不可。 |
| LOCK_UN | ロック解放。ファイルロックを解放。 |
| LOCK_NB | ロック中にブロックしない。 |
サンプルコード
以下のテキストファイル(test.txt)を読み込んで、それらを出力するサンプルコードです。
flock ( ファイルポインタ, ロックモード )
<?php
// ファイルポインタをオープン
$handle = fopen("test.txt", "r");
// ファイルをロック
var_dump( flock($handle, LOCK_SH) );
// ファイルをアンロック
var_dump( flock($handle, LOCK_UN) );
// ファイルポインタをクローズ
fclose($handle);
?>
実行結果
サンプルコードの実行結果です。
bool(true) bool(true)
ファイルロック、ファイルのアンロックともに成功しているので、trueが返されています。アンロックを実行しなくても、fcloseでロックは解除されます。