【PHP8.x】flock関数の使い方

作成日: 更新日:

flock関数は、開いているファイルに対してロックの取得や解放を実行する関数です。Webアプリケーションなど、複数のプロセスが同時に同じファイルへアクセスする環境では、ファイルへの書き込み処理が衝突し、データが破損してしまう可能性があります。flock関数は、このような競合状態を防ぎ、ファイルの整合性を保つために使用される排他制御の仕組みです。第一引数にはfopen関数などで取得したファイルポインタを、第二引数にはロックの種類を指定する定数を渡します。例えば、他のプロセスからの読み込みは許可するが書き込みは防ぐ「共有ロック(LOCK_SH)」や、自分以外の全てのプロセスからの読み書きをブロックする「排他ロック(LOCK_EX)」などがあります。ファイルへの処理が完了した後は、必ず「ロック解放(LOCK_UN)」を指定してロックを解除する必要があります。このロックはアドバイザリロックと呼ばれる協調的な仕組みであり、flock関数を使用するプロセス間でのみ有効です。ロックの取得や解放に成功した場合はtrueを、失敗した場合はfalseを返します。

基本的な使い方

構文(syntax)

flock(resource $file, int $operation): bool

引数(parameters)

resource $stream, int $operation, ?int &$would_block = null

  • resource $stream: ロックをかけるファイルリソースを指定します。fopen() などで取得したファイルポインタを指定します。
  • int $operation: 実行するロック操作を指定します。LOCK_SH(共有ロック)、LOCK_EX(排他ロック)、LOCK_UN(ロック解除)などの定数を使用します。
  • ?int &$would_block = null: ロックがすぐに取得できなかった場合に、その旨を示す整数値が格納されます。true の場合はロックがブロックされたことを示します。

戻り値(return)

bool

ファイルロック操作の成功・失敗を示す真偽値(boolean)が返されます。ロック操作が成功した場合は true、失敗した場合は false が返されます。

【PHP8.x】flock関数の使い方 | いっしー@Webエンジニア