5

フラット ファイルの同時読み取りはほぼ無制限です (間違っていたら訂正してください)。しかし、書き込みの並行性はどうですか? で終わるアクセスの詳細の行を追加するように、PHP での単純なアクセス ログの書き込み (訪問用) を検討してください。\n

fopen(); // in append mode
fwrite();
fclose();

同時訪問者がいるので、システム (wbserver/php ユーザーである 1 人のユーザー) はどのようにビュー ログを同時に書き込みますか?

私の混乱は次のとおりです: 関数file_put_contents()(上記の 3 つの関数のラッパー) にはロック ( ) のオプションがありますLOCK_EXか? このロック オプションを使用することは有益ですか? これはログの書き込みにどのように影響しますか?

更新:私の質問は、LOCKingがもともとどのように機能し、ログをファイルに書き込むことに影響するかについてです。file_put_contents比較しませんしfwrite・・・ 私の質問でさえ、に限定されませんPHP。問題は、書き込みプロセス中にファイルをロックすることです。

4

2 に答える 2

3

file_put_contents()ロックするオプションがありますが、私の意見では、flock()代わりに使用する必要があります。

マニュアルから:

使用可能なフラグ

FILE_USE_INCLUDE_PATH
インクルードディレクトリでファイル名を検索します。詳細については、include_pathを参照してください。

FILE_APPEND ファイルfilenameがすでに存在する場合は、データを上書きするのではなく、ファイルに追加します。

LOCK_EX 書き込み中にファイルの排他ロックを取得します。

flock()他の方法を使用できます。

共有ロック(リーダー)を取得するためのLOCK_SH 。排他ロック(ライター)を取得するための
LOCK_EX 。
LOCK_UNは、ロックを解放します(共有または排他的)。

ここを参照してください:http://php.net/manual/en/function.flock.phpおよびここを参照してください:http://php.net/manual/en/function.file-put-contents.php

于 2012-05-29T03:10:41.520 に答える
0

アクセスログのファイルロックは競合状態になりやすい環境なので注意してください。おそらく別の方法を調べますか?データベースへのロギング、多分?適切に設計されたシステムが、並列プロセスで同時にログを開いて書き込みを試みるのは非常に簡単です。

多分モノログを見てみましょうか?非同期ロギング用のロギング ハンドラがいくつかあります。これは、アクセス ロギングに関係するあらゆるものに理想的です。

https://github.com/Seldaek/monolog

于 2012-05-29T03:25:00.567 に答える