ホームページ  >  記事  >  バックエンド開発  >  ファイルの排他ロックが発生した場合、file_put_contents はキューに登録して待機しますか?

ファイルの排他ロックが発生した場合、file_put_contents はキューに登録して待機しますか?

WBOY
WBOYオリジナル
2016-10-17 09:30:162176ブラウズ

file_put_contents('test.txt',$data,FILE_APPEND|LOCK_EX);
上で述べたように、ファイルに大量のデータが書き込まれる場合、ファイルには排他ロックがあるため、後続の file_put_contents もファイルにデータを書き込むため、時間がかかります。前のファイル書き込み操作が完了するまで待ちますか?

返信内容:

file_put_contents('test.txt',$data,FILE_APPEND|LOCK_EX); 上で述べたように、ファイルに大量のデータが書き込まれる場合、ファイルには排他ロックがあるため、後続の file_put_contents もファイルにデータを書き込むため、時間がかかります。前のファイル書き込み操作が完了するまで待ちますか?

はい、file_put_contents の実装は、実際には、fopen、fwrite、fflush、および fclose の一連の操作の単純な実装です。 LOCK_EX を追加すると、fopen も flock を実行し、ファイルのロックが解除されるまでこのコードはブロックされ、その後実行が継続されます。この待機はキューに並べられます。

また、大きすぎるファイルを書き込むとPHPの最大実行イベントを超える可能性があり、データが失われる危険性がありますので、重要なデータの場合はご自身で大容量書き込みキューを実装することをお勧めします。

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