PHP多实例单个日志文件

时间:2012-11-26 01:19:13

标签: php concurrency instance

我是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 个答案:

答案 0 :(得分:7)

只要您的记录器以追加模式打开文件(例如fopen("my.log", "a")或类似),每个人都应该能够在不丢失数据的情况下写入文件(操作系统)将负责确保在不覆盖的情况下添加所有内容。但是,对于文件的写入的顺序不能保证跨实例 - 例如你可能会得到散布的日志条目。

例如,如果实例A按顺序写入行abc,而实例B写入行123,您可能会得到以下结果:

1
a
b
2
c
3

或任何其他交错。

相关问题