我的代码每天运行一次,fputs()将每日日志条目附加到以下格式的平面文件中:
yyyy-mm-dd|log entry
此文件随后由fgets()显示的网页显示,并显示从最旧到最新的所有记录。
我需要做的是改变这个写/读过程,以便:
一个。只有x个最新记录保存在日志文件中。
B中。输出顺序颠倒过来,首先显示最新的日志条目。
如果使用写操作可以反转日志文件的顺序,那么读操作可以保持不变。
除了fputs和fgets之外,如果有更好的方法可以做到这一点,我愿意接受它。
由于
答案 0 :(得分:1)
我认为(尽管它不是最有效的内存方式)这样做的最好方法是:
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 happened\n";
writeLogEntry('/path/to/file', $logEntry, 1000);
使用此方法,文件按您希望的顺序保存(最新的)。但是,如果此文件可能一次由多个进程写入,则需要实现某种形式的锁定以避免丢失数据。