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")或类似模式)打开文件,每个人都应该能够在不丢失数据的情况下写入文件(操作系统将负责确保添加所有内容而不会覆盖)。但是,不能保证跨实例写入文件的顺序- 例如,您可能会得到散布的日志条目。

例如,如果实例 A以该顺序写入 lines , , 而实例 B 写入 lines a, b, and ,您可能会得到以下结果:c123

1
a
b
2
c
3

或任何其他交错。

于 2012-11-26T01:23:28.507 回答