$iplog = "$time EST - $userip - $location - $currentpage\n";
file_put_contents("iplog.txt", $iplog, FILE_APPEND);
我正在尝试将此内容写入文本文件,但它将其置于底部,我希望新条目位于顶部。如何更改指针放置文本的位置?
答案 0 :(得分:1)
在文件开头添加前缀非常罕见,因为它需要复制文件的所有数据。如果文件很大,这可能会使性能无法接受(特别是当它是一个经常写入的日志文件时)。如果你真的想那,我会重新思考。
使用PHP执行此操作的最简单方法是:
$iplog = "$time EST - $userip - $location - $currentpage\n";
file_put_contents("iplog.txt", $iplog . file_get_contents('iplog.txt'));
答案 1 :(得分:0)
file_get_contents
解决方案没有用于将内容添加到文件的标志,并且对于通常是日志文件的大文件效率不高。解决方案是将fopen
和fclose
与临时缓冲区一起使用。如果不同的访问者同时更新您的日志文件,那么您可能会遇到问题,但是那个是另一个主题(然后您需要锁定机制)。
<?php
function prepend($file, $data, $buffsize = 4096)
{
$handle = fopen($file, 'r+');
$total_len = filesize($file) + strlen($data);
$buffsize = max($buffsize, strlen($data));
// start by adding the new data to the file
$save= fread($handle, $buffsize);
rewind($handle);
fwrite($handle, $data, $buffsize);
// now add the rest of the file after the new data
$data = $save;
while (ftell($handle) < $total_len)
{
$chunk = fread($handle, $buffsize);
fwrite($handle, $data);
$data = $chunk;
}
}
prepend("iplog.txt", "$time EST - $userip - $location - $currentpage\n")
?>
应该这样做(代码已经过测试)。它需要一个初始iplog.txt
文件(或filesize
抛出错误。