(PHP 4, PHP 5)
flock — 汎用のファイルロックを行う
flock()により、(ほとんどの Unix や Windows さえ含む) ほとんど全てのプラットフォームで使用可能な簡易な読み手/書き手モデルが実現されます。
ロックの解放には fclose() でを使用します (これは、スクリプトが終了した場合にも自動的にコールされます)。
PHP は、恣意的にファイルをロックする汎用の手段を提供します (これは、アクセスする全プログラムが同一のロックの方法を使用する必要があり、 そうでない場合は動作しないことを意味します)。 デフォルトでは、要求したロックが確保されるまでこの関数はブロックします。 (非 Windows プラットフォームでは) 以下で説明する LOCK_MB オプションでこの挙動を制御することができます。
オープンしたファイルへのポインタ。
operation は以下のいずれかとなります。
ロックがブロックされた (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($fp, LOCK_EX)) { // 排他ロックを行います
ftruncate($fp, 0); // ファイルを切り詰めます
fwrite($fp, "Write something here\n");
flock($fp, LOCK_UN); // ロックを解放します
} else {
echo "ファイルを取得できません!";
}
fclose($fp);
?>
注意: flock() は、Windows 環境下では必ずロックを行います。
注意: flock()は、ファイルポインタを必要とするため、 (fopen()へ引数"w"または"w+"を指定して)書き込 みモードでオープンすることにより丸めるファイルにアクセス保護する 特別なロックファイルを使用する必要があるかもしれません。
flock() は NFS 及び他の多くのネットワークファイルシステムでは動作しません。 詳細についてはオペレーティングシステムのドキュメントを確認ください。
いくつかのオーペレーティングシステムでflock() はプロセスレベルで実装されています。ISAPIのようなマルチスレッド 型のサーバーAPIを使用している場合、同じサーバーインスタンスの並 列スレッドで実行されている他のPHPスクリプトに対してファイルを保 護する際に flock()を使用することはできません!
flock()はFATのような 旧式のファイルシステムではサポートされていないため、 そのような環境の場合は常にFALSEを返すことになります。 (これは特にWindows98ユーザーにとって常に真です)