PHP マニュアル
前のページ |  | 次のページ

# 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`は、次の値のどれかとな ります。

- 共有ロック(読み手)とするには、`operation`に LOCK_SH(PHP 4.0.1より前の場合は1に設定します)をセットします。

- 排他的ロック(書き手)とするには、 `operation`にLOCK_EX(PHP 4.0.1より前の場 合は2に設定します)をセットします。

- (共有または排他的)ロックを開放するには、 `operation`にLOCK_UN(PHP 4.0.1より前の場 合は3に設定します)をセットします。

- ロック中に flock()でブロックを行いたくない場 合は、`operation` に LOCK_NB ( PHP 4.0.1 より前の場合は 4 に設定します)を加えます。

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ユーザーにとって常に真です）

前のページ | ホーム | 次のページ
filetype | 上に戻る | fnmatch