flock

(PHP 3 >= 3.0.7, PHP 4, PHP 5)

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

説明

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

PHP は、恣意的にファイルをロックする汎用の手段を提供します。 (これは、アクセスする全プログラムが同一のロックの方法を使用する 必要があり、そうでない場合は動作しないことを意味します)

注意: flock() 関数は Windows 環境下では必ず行ってください。

flock()は、handleを用いて 操作を行います。これは、オープンされたファイルポインタである必要が あります。operationは、次の値のどれかとな ります。

flock()により、(ほとんどのUNIXやWindowsさえ含む) ほとんど全てのプラットフォームで使用可能な簡易な読み手/書き手モデ ルが実現されます。ロックをブロックモードとする場合(EWOULDBLOCK errno 条件)にオプションの3番目の引数にTRUEを設定します。 ロックは fclose() でも解放されます (スクリプトが終了した場合も自動的にコールされます) 。

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

例 1. flock() example

<?php

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

if (
flock($fp, LOCK_EX)) { // 排他的ロックを行う
    
fwrite($fp, "Write something here\n");
    
flock($fp, LOCK_UN); // ロックを解放する
} else {
    echo
"Couldn't lock the file !";
}

fclose($fp);

?>

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

警告

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

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

flock() is not supported on antiquated filesystems like FAT and its derivates and will therefore always return FALSE under this environments (this is especially true for Windows 98 users). flock()FATのような 旧式のファイルシステムではサポートされていないため、 そのような環境の場合は常にFALSEを返すことになります。 (これは特にWindows98ユーザーにとって常に真です)