ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルでファイル ロックを使用する方法

PHP_PHP チュートリアルでファイル ロックを使用する方法

WBOY
WBOYオリジナル
2016-07-13 17:42:011011ブラウズ

//書く
$fp = fopen("test.txt", ab) //最後から
; flock($fp, LOCK_EX); fwrite($fp, 単なるテスト文字列....) // 書き込みを開始します...
flock($fp, LOCK_UN); fclose($fp);
//読む
$fp = fopen("test.txt", r);

群れ($fp, LOCK_SH);

//ファイルから読み取る....
群れ($fp, LOCK_UN);
fclose($fp); PHP マニュアルの関数 flock の紹介を詳しく見てみましょう:

flock -- 軽量のコンサルテーション ファイル ロック

関数のプロトタイプは次のとおりです: bool flock (int handle, int Operation [, int &wouldblock])

PHP は、すべてのファイルをアドバイザリー方式でロックする軽量の方法をサポートしています (つまり、アクセスするすべてのプログラムが同じ方法でロックする必要があります。そうしないと機能しません)。 flock() は Windows で強制されます。 flock() 操作のハンドルは、開いているファイル ポインターである必要があります。操作は次のいずれかの値になります:

共有ロック (プログラムの読み取り) を取得するには、操作を LOCK_SH に設定します (PHP 4.0.1 より前のバージョンでは 1 に設定)。

排他ロック(プログラムの書き込み)を取得するには、操作をLOCK_EXに設定します(PHP 4.0.1より前のバージョンでは2に設定)。

ロック (共有または排他) を解放するには、操作を LOCK_UN に設定します (PHP 4.0.1 より前のバージョンでは 3 に設定)。

ロック時に flock() をブロックしたくない場合は、操作に LOCK_NB を追加します (PHP 4.0.1 より前のバージョンでは 4 に設定)。 flock() を使用すると、任意のプラットフォーム (ほとんどの Unix 派生製品や Windows も含む) で使用できる単純な読み取り/書き込みモデルを実装できます。ロックがブロックされる場合 (EWOULDBLOCK エラー コードの場合)、オプションの 3 番目のパラメーターは TRUE に設定されます。ロック操作は fclose() によって解放することもできます (コードの実行が完了すると自動的に呼び出されます)。成功した場合は TRUE、失敗した場合は FALSE を返します。

PHP マニュアルにある上記の古典的な例を見てみましょう:

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

if (flock($fp, LOCK_EX)) { // 排他ロックを実行します

fwrite($fp, "ここに何かを書いてください ");

flock($fp, LOCK_UN); // ロックを解除します

} その他 {
echo "ファイルをロックできませんでした!";
}

fclose($fp);

?> 注: flock() にはファイル ポインターが必要なため、書き込みモードで開くファイルへのアクセスを保護するために特別なロック ファイルを使用する必要がある場合があります (fopen() に「w」または「w+」を追加します)関数 )。

注:

flock() は、NFS および他の一部のネットワーク ファイル システムでは使用できません。詳細については、オペレーティング システムのマニュアルを確認してください。

一部のオペレーティング システムでは、flock() がプロセス レベルで実装されます。マルチスレッド サーバー API (ISAPI など) を使用する場合、ファイルを保護するために flock() に依存することができない場合があります。これは、ファイルが同じサーバー インスタンス内の他の並列スレッドで実行されている PHP スクリプトによって処理される可能性があるためです。

flock() は、FAT やその派生などの古いファイル システムをサポートしません。したがって、この環境では常に FALSE を返します (特に Windows では

)

http://www.bkjia.com/PHPjc/486108.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/486108.html技術記事 //WRITE $fp = fopen(test.txt, ab); //最後から flock($fp, LOCK_EX) //待機のためにファイルをロックします... fwrite($fp, Just A Test String... ....); //書き込み開始...flock($fp, LOCK_UN)...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。