4

PHP初心者なので、どなたか教えていただけると嬉しいです。

ログ ファイルに追加するクラスを作成しようとしています。リソース自体が Logger クラス内で静的になるようにクラスを作成しました。複数のクラスで Logger オブジェクトをインスタンス化できますが、すべてが同じ静的リソースを共有してファイルに書き込むことができるため、これはテスト時にうまく機能します。

そうは言っても、私は現在、PHP の複数のインスタンス (複数のユーザーがページをロードしている) の問題、より具体的には同時実行の問題に直面しています。

質問:

  1. 私のサイトで、ロガーを使用する同時 PHP インスタンスが発生した場合、それらはこのファイルへのアクセスを争うのでしょうか?

  2. 私はUBUNTUを使用していますが、これはWindowsに違いをもたらしますか?

  3. 私のロガー ファイルでは、追加された X 行ごとにチェックを行い、ファイルのサイズを確認します。サイズが Y より大きい場合は、このファイルを閉じてファイルを「ローテーション」します (mylog.log2 は mylog.log3 になり、 mylog.log1 は mylog.log2 になり、 mylog.log は mylog.log1 になります)、新しい mylog.log ファイルを作成します。複数のインスタンスが書き込みを行っている場合、これは問題になりますか? もしそうなら、どうすればこれを適切に処理できますか?

初心者の質問で申し訳ありません...

4

1 に答える 1

8

ロガーがファイルを追加モード (たとえば、同様のモード)で開いている限りfopen("my.log", "a")、誰もがデータを失うことなくファイルに書き込めるはずです (OS は、上書きせずにすべてが追加されるようにします)。ただし、ファイルへの書き込み順序はインスタンス間で保証されません。たとえば、ログ エントリが散在する可能性があります。

たとえば、インスタンス A が行abcをこの順序で書き込み、インスタンス B が行12、および を書き込む場合3、次の結果が得られる可能性があります。

1
a
b
2
c
3

または他のインターリーブ。

于 2012-11-26T01:23:28.507 に答える