我是PHP的新手,所以我想知道你是否可以向我解释一下。
我正在尝试编写一个将附加到日志文件的类。我编写了这个类,以便资源本身在Logger类中是静态的。这对我来说非常适合我测试,因为我可以让多个类实例化一个Logger对象但是所有人都将共享相同的静态资源来写入该文件。
那就是说,我现在面临的问题是多个PHP实例(多个用户加载我的页面),更具体地说:并发。
问题:
当我的网站遇到使用记录器的并发php实例时,他们是否会争取访问此文件?
我在使用UBUNTU,但是这会对Windows产生影响吗?
在我的记录器文件中,我检查每X行添加的行数以查看文件的大小,如果大小大于Y,我关闭此文件并“旋转”文件(mylog。 log2变为mylog.log3,mylog.log1变为mylog.log2,mylog.log变为mylog.log1)并创建一个全新的mylog.log文件。如果多个实例正在写它,这会引起关注吗?若然,怎样才能妥善处理?
抱歉新问题......
答案 0 :(得分:7)
只要您的记录器以追加模式打开文件(例如fopen("my.log", "a")
或类似),每个人都应该能够在不丢失数据的情况下写入文件(操作系统)将负责确保在不覆盖的情况下添加所有内容。但是,对于文件的写入的顺序不能保证跨实例 - 例如你可能会得到散布的日志条目。
例如,如果实例A按顺序写入行a
,b
,c
,而实例B写入行1
,2
和3
,您可能会得到以下结果:
1
a
b
2
c
3
或任何其他交错。