ホームページ  >  記事  >  バックエンド開発  >  PHP はファイルのロックおよびロック解除メソッドを実装します

PHP はファイルのロックおよびロック解除メソッドを実装します

墨辰丷
墨辰丷オリジナル
2018-05-21 09:15:211834ブラウズ

この記事では、PHP でファイルのロックとロック解除の操作を実装する方法を主に紹介し、ファイルのロックとロック解除の操作に関する PHP の機能、実装方法、および関連する注意事項をサンプルの形で分析します。

プロジェクトでは、データベースクエリログ、アクセスログ、外部インターフェースリクエストリターンパラメータログなどのログが一般的に使用されますが、ログを処理する際の簡単な書き込み方法は以下の通りです

$file = 'log.txt';
$fp = fopen($file, 'a+');
if(!is_writable($file)){
  die("The $file is not writable!");
}
fwrite($fp, 'here');
fclose($fp);

しかし、この書き込み方法は次のとおりです。欠陥は、Web サイトに同時にアクセスするのは 1 人のユーザーだけではなく、複数のユーザーが同時にアクセスすると、前のプロセスが途中で書き込みを開始してしまうという問題が発生します。が書き込まれたため、最終的に生成されたログはめちゃくちゃになってしまいました。この場合、ロックが使用されます。ファイルがロックされている間、他のプロセスはファイルを変更できません。ファイルがロック解除されている場合にのみ実行できます。書き方は以下の通りです

$file = 'log.txt';
$fp = fopen($file, 'a+');
if(!is_writable($file)){
  exit("The $file is not writable!");
}
flock($fp, LOCK_EX);// 加锁
fwrite($fp, 'here');
flock($fp, LOCK_UN);// 解锁
fclose($fp);

ファイルロック期間中に他のプロセスがファイルを操作できない例をテストしたい場合は、以下のデモを使用できます

log.php

$file = 'log.txt';
$fp = fopen($file, 'a+');
if(!is_writable($file)){
  exit("The $file is not writable!");
}
flock($fp, LOCK_EX);
fwrite($fp, 'here');
sleep(10);
flock($fp, LOCK_UN);
fclose($fp);

test.php

$file = 'lock.txt';
$fp = fopen($file, 'a');
fwrite($fp, 'good'); // 在sleep期间写不进去
fclose($fp);
// 或是直接使用下面的这个例子,发现在sleep期间打印是个空值
//var_dump(file_get_contents($file));

テストするときは、最初に log.php を実行し、次に test.php を実行すると、test.php がスリープ中に効果を達成できないことがわかります。

関連する推奨事項:

phpファイルロック高い同時実行性へのソリューション

PHPファイルロックの同時実行操作の詳細な説明

PHPファイルロックとプロセスロックの分析例

以上がPHP はファイルのロックおよびロック解除メソッドを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。