如何先写最近记录的文件



我的代码每天运行一次,fputs()将每日日志条目以格式附加到平面文件中:

yyyy-mm-dd|log entry

这个文件然后由一个web页面显示,该页面fgets()并显示从最老到最新的所有记录。

我需要做的是改变这个写/读进程,这样:

。日志文件中只保留最近的x条记录。

B。输出顺序相反,首先显示最近的日志条目。

如果日志文件的顺序可以与写操作的顺序相反,那么读操作可以保持不变。

如果有比输出和输出更好的方法,我愿意接受。

谢谢

我认为最好的方法是这样做(尽管这不是最有效的内存使用方法):

function writeLogEntry ($filePath, $str, $maxRecords) {
  $fileData = file($filePath); // Get file contents as array
  array_unshift($fileData, $str); // Add the log entry to the beginning
  if (count($fileData) > $maxRecords) { // Strip old records off
    $file = array_slice($fileData, 0, $maxRecords);
  }
  file_put_contents($filePath, $fileData); // Write file again
}
$logEntry = "yyyy-mm-dd|Something happenedn";
writeLogEntry('/path/to/file', $logEntry, 1000);

使用这种方法,文件按照您想要的顺序保存(最新的优先)。但是,如果该文件可能同时被多个进程写入,则需要实现某种形式的锁定以避免丢失数据。

相关内容

  • 没有找到相关文章

最新更新