ファイルをロック - 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でロックは解除されます。