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 を返します。
注意: flock()は、ファイルポインタを必要とするため、 (fopen()へ引数"w"または"w+"を指定して)書き込 みモードでオープンすることにより丸めるファイルにアクセス保護する 特別なロックファイルを使用する必要があるかもしれません。
警告 |
flock() は NFS 及び他の多くのネットワークファイルシステムでは動作しません。 詳細についてはオペレーティングシステムのドキュメントを確認ください。 いくつかのオーペレーティングシステムでflock() はプロセスレベルで実装されています。ISAPIのようなマルチスレッド 型のサーバーAPIを使用している場合、同じサーバーインスタンスの並 列スレッドで実行されている他のPHPスクリプトに対してファイルを保 護する際に flock()を使用することはできません! flock()はFATのような 旧式のファイルシステムではサポートされていないため、 そのような環境の場合は常にFALSEを返すことになります。 (これは特にWindows98ユーザーにとって常に真です) |