ファイルシステム 関数
PHP Manual

flock

(PHP 4, PHP 5)

flock汎用のファイルロックを行う

説明

bool flock ( resource $handle , int $operation [, int &$wouldblock ] )

flock()により、(ほとんどの Unix や Windows さえ含む) ほとんど全てのプラットフォームで使用可能な簡易な読み手/書き手モデルが実現されます。

ロックの解放には fclose() でを使用します (これは、スクリプトが終了した場合にも自動的にコールされます)。

PHP は、恣意的にファイルをロックする汎用の手段を提供します (これは、アクセスする全プログラムが同一のロックの方法を使用する必要があり、 そうでない場合は動作しないことを意味します)。 デフォルトでは、要求したロックが確保されるまでこの関数はブロックします。 (非 Windows プラットフォームでは) 以下で説明する LOCK_MB オプションでこの挙動を制御することができます。

パラメータ

handle

オープンしたファイルへのポインタ。

operation

operation は以下のいずれかとなります。

  • 共有ロック(読み手)とするには LOCK_SH をセットします。
  • 排他的ロック(書き手)とするには LOCK_EX をセットします。
  • (共有または排他的)ロックを開放するには LOCK_UN をセットします。
  • ロック中に flock() でブロックを行いたくない場合は、 LOCK_NB をセットします (Windows ではサポートされていません)。

wouldblock

ロックがブロックされた (errno が EWOULDBLOCK となった) 場合に、オプションの 3 番目の引数に TRUE が設定されます。

返り値

成功した場合に TRUE を、失敗した場合に FALSE を返します。

変更履歴

バージョン 説明
4.0.1 定数 LOCK_XXX が追加されました。以前のバージョンでは LOCK_SH のかわりに 1、 LOCK_EX のかわりに 2、 LOCK_UN のかわりに 3、そして LOCK_NB のかわりに 4 を使用しなければなりません。

例1 flock() の例

<?php

$fp 
fopen("/tmp/lock.txt""w");

if (
flock($fpLOCK_EX)) { // 排他ロックを行います
    
ftruncate($fp0);  // ファイルを切り詰めます
    
fwrite($fp"Write something here\n");
    
flock($fpLOCK_UN); // ロックを解放します
} else {
    echo 
"ファイルを取得できません!";
}

fclose($fp);

?>

注意

注意: flock() は、Windows 環境下では必ずロックを行います。

注意: flock()は、ファイルポインタを必要とするため、 (fopen()へ引数"w"または"w+"を指定して)書き込 みモードでオープンすることにより丸めるファイルにアクセス保護する 特別なロックファイルを使用する必要があるかもしれません。

警告

flock() は NFS 及び他の多くのネットワークファイルシステムでは動作しません。 詳細についてはオペレーティングシステムのドキュメントを確認ください。

いくつかのオーペレーティングシステムでflock() はプロセスレベルで実装されています。ISAPIのようなマルチスレッド 型のサーバーAPIを使用している場合、同じサーバーインスタンスの並 列スレッドで実行されている他のPHPスクリプトに対してファイルを保 護する際に flock()を使用することはできません!

flock()FATのような 旧式のファイルシステムではサポートされていないため、 そのような環境の場合は常にFALSEを返すことになります。 (これは特にWindows98ユーザーにとって常に真です)


ファイルシステム 関数
PHP Manual