この記事では主に紹介していますので、興味のある方は参考にしていただければ幸いです。
この記事の例では、PHP が flock を使用してファイル ロックを実装する方法について説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:
公式ドキュメントでの Flock の説明は次のとおりです: flock() を使用すると、任意のプラットフォーム (ほとんどの Unix 派生製品や Windows も含む) で使用できる単純な読み取り/書き込みモデルを実装できます。 。ロックがブロックされる場合 (EWOULDBLOCK エラー コードの場合)、オプションの 3 番目のパラメータを TRUE に設定します。ロック操作は fclose() によって解放することもできます (コードの実行が完了すると自動的に呼び出されます)。
簡単に言えば、ファイルをロックして複数のプロセスによるファイルへのアクセスを制限し、競合を防ぐことです。例:
<?php $file = fopen("test.txt","w+"); if (flock($file,LOCK_EX)) { fwrite($file,"Write something"); flock($file,LOCK_UN); } else { echo "Error locking file!"; } fclose($file); ?>
説明:
1. このコードの意味は、ファイル test.txt を読み取りおよび書き込みモードで開くことです。ユーザーが php ページを呼び出すと、ファイルが開きます。ファイル test.txt .txt ファイルの場合、flock($file,LOCK_EX) コードが実行され、test.txt ファイルが排他的にロックされます (ファイルはこのユーザーのみが読み書きできます)。ユーザーがアクセスを希望している場合、ユーザーがファイルを閉じる (ロックを解放する) まで、ファイルはブロックされます。
2. コードを flock($file,LOCK_EX LOCK_NB) に変更して、ロック時に直接エラーが返されるようにすると、新しいユーザーがファイルにアクセスすると、「ファイルのロック中にエラーが発生しました!」と表示されます。
3. この関数の構文は flock(file,lock,block) で、file は必須です。開いているファイルをロックまたは解放するように指定します。ロックが必要です。使用するロックのタイプを指定します。ブロックはオプションです。 1 または true に設定すると、ロック中に他のプロセスがブロックされます。
例: 複数のプロセスが同じファイルを同時に正常に書き込むことができるようにするために、PHP コードを作成してください。
function writeData($path, $mode,$data) { $fp = fopen($path, $mode); $retries = 0; $max_retries = 100; do{ if ($retries > 0) { usleep(rand(1, 10000)); } $retries += 1; }while (!flock($fp, LOCK_EX) and $retries<= $max_retries); if ($retries == $max_retries) { return false; } fwrite($fp, "$data\n"); flock($fp, LOCK_UN); fclose($fp); return true; }
要約:上記は次のとおりです。この記事の内容全体が皆さんの学習に役立つことを願っています。
関連する推奨事項:
Web ページを実装するための php ツールキャッシュ クラス コードと使用法
に基づいてすべてのバックグラウンド関数呼び出しを制御します。以上がPHPflockファイルロックの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。