限制阵列长度 - 失败?

时间:2015-07-10 10:44:44

标签: php arrays

我的某个网站上的访问者登录失去了所有访问者。它已经工作了一年半,但所有参赛作品都在一夜之间丢失了。日志页面在这里(如果您访问其中一个站点页面,您的信息将添加到日志中): 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);

有关为什么我的日志会丢失其条目的任何建议?我有编码错误吗?

1 个答案:

答案 0 :(得分:0)

使用file_put_contents撰写文件时,您实际上使用的是一系列fopen()fwrite()fclose(),其中文件以文件模式w打开:

  

仅供写作;将文件指针放在。的开头   文件并将文件截断为零长度。如果该文件不存在,   试图创造它。

由于您没有对文件进行独占锁定,因此可以在文件被截断的位置读取文件,并将文件指针放在开头。在这种情况下,file()命令的内容将为空。

相反,您应该使用选项LOCK_EX在写入时保护文件的独占锁定:

file_put_contents($filename, $logline, LOCK_EX);

您可以在flock()文档中了解有关详情。