前回の記事では、PHPを使用して指定ディレクトリ(サブディレクトリは除く)内のファイルを取得する方法を紹介しました。必要に応じて、「指定ディレクトリにどのファイルがあるかをphpはどのように知るのか」を参照してください。 「。」今回は、ファイルロックを紹介し、ファイルロックの機能を見て、ファイルロックを追加およびファイルロックを解除する方法を説明します。
前回の記事「phpファイル操作:ファイルをクリアしてデータを再追加する方法」では、ファイルにデータを書き込む方法を紹介しました。同時に単一ユーザーでも問題ないようにファイルを操作してください。ただし、ネットワーク環境で複数のクライアント ユーザーがサーバー上の同じファイルに同時にアクセスすると、プログラムでエラーが発生し、ファイルが破損する可能性があります。
例:
あるユーザーがファイルにデータを書き込んでいます (データはまだ完了していません)。この時点で、別のユーザーも書き込んでいます。データをこのファイルに書き込みます。ファイルにデータを書き込むと、データ書き込み時に混乱が生じます。
または、ユーザーがデータの書き込みを完了していない場合、他のユーザーがファイルの内容を取得してしまいます。 . すると、ユーザーが取得したデータは不完全となり、不完全なデータが取得されてしまいます。
この問題を解決するために、PHP はファイルをロックまたは解放できるファイル ロック メカニズムである flock() 関数を提供します。
PHP を使用してファイルに書き込むと、ファイルは一時的にロックされ、ロックが解除されて初めて他のユーザーがファイルを操作できるようになります。これにより、同じファイルに同時にアクセスしたときのデータの破損が回避されます。
次の例を見てみましょう:
<?php header("Content-Type: text/html;charset=utf-8"); //设置字符编码 $file = "test.txt"; $handle = fopen($file,'w+'); //打开文件 if(flock($handle, LOCK_EX|LOCK_NB)){ //给文件上锁 fwrite($handle, '现在是:'.date('Y-m-d H:i:s', time())); //写入数据 flock($handle, LOCK_UN); //释放文件锁 }else{ echo "string"; } fclose($handle);//关闭文件 readfile($file);//读取文件内容 ?>
上記のコードを分析してください:
最初に fopen() 関数を使用してファイルを開きます。次に、flock($handle, LOCK_EX|LOCK_NB)
ステートメントを使用してファイルに「LOCK_EX」排他ロックを追加し、ロック時に他のプロセスがブロックされないように「LOCK_NB」を設定し、コンテンツを直接返します。それ以外。次に、 fwrite() 関数を使用して書き込み操作を実行し、現在時刻を書き込むことができます。
ファイルを操作した後、fclose() 関数を使用してファイルを閉じる必要があり、最後に readfile() 関数を使用してファイルの内容を読み取ります。したがって、出力結果は次のようになります。
# flock() 関数を簡単に見てみましょう。
flock($file,$lock,$block)
関数は 2 つの必須パラメータ $file
(ロック/ロック解除が必要な開いているファイル) と # を受け入れます。 ##$lock (ロック タイプ) および省略されたパラメーター
$block (値が 1 または true に設定されている場合、ファイルがロックされているときに他のプロセスをブロックできます)。
| で区切る必要があります):
LOCK_SH - 共有ロック (プログラムの読み取り)。他のプロセスがファイルにアクセスできるようにします。
LOCK_EX - 排他的ロック (プログラムが書き込まれたもの)。他のプロセスがファイルにアクセスできないようにします。
LOCK_UN - 共有ロックまたは排他ロックを解放します。
LOCK_NB - ロック状況を他のプロセスをブロックしないようにします。
《PHP 面接質問まとめ (集)》《php 動画チュートリアル###"###
以上がPHPはファイルロックについて知っていますか?用途は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。