我的某个网站上的访问者登录失去了所有访问者。它已经工作了一年半,但所有参赛作品都在一夜之间丢失了。日志页面在这里(如果您访问其中一个站点页面,您的信息将添加到日志中): http://mykindred.com/dalton/hoax/viewlog.php
日志保存在文本文件($ filename)中,该文件应限制为$ maxloglines = 300. $ logline包含要添加到日志中的新访问者。生成日志的代码:
$lines = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$logline .= implode("\n", array_slice($lines, 0, $maxloglines));
file_put_contents($filename, $logline);
有关为什么我的日志会丢失其条目的任何建议?我有编码错误吗?
答案 0 :(得分:0)
使用file_put_contents
撰写文件时,您实际上使用的是一系列fopen()
,fwrite()
和fclose()
,其中文件以文件模式w
打开:
仅供写作;将文件指针放在。的开头 文件并将文件截断为零长度。如果该文件不存在, 试图创造它。
由于您没有对文件进行独占锁定,因此可以在文件被截断的位置读取文件,并将文件指针放在开头。在这种情况下,file()
命令的内容将为空。
相反,您应该使用选项LOCK_EX
在写入时保护文件的独占锁定:
file_put_contents($filename, $logline, LOCK_EX);
您可以在flock()
文档中了解有关详情。