今日の人気記事

  1. ホスト名からIPアドレスを取得 - gethostbyname()、gethostbynamel()
  2. 文字列を大文字 / 小文字に変換 - strtoupper()、strtolower() - mb_strtoupper()、mb_strtolower()

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

ファイル の人気記事

  1. ファイルから1行ずつ読み込む - fgets()
  2. ファイル名を変更 - ファイルを移動 - rename()
  3. 文字列にファイルを書き込む - fwrite()、fputs()
  4. 親ディレクトリのパスを表示 - dirname()
  5. ディレクトリを作成 - mkdir()
  6. ファイルのサイズを取得 - filesize()
  7. 文字列をファイルに書き込む - file_put_contents()
  8. ユニークなファイル名の一時ファイルを作成 - tempnam()

関連記事(一部広告含む)