印出 txt 內容,但從最新的開始

$fh = fopen('../storage/xxx.txt','r');
      while ($line = fgets($fh)) {
        echo($line).'<br>';
      }
      fclose($fh);

因為寫入時都是一筆一筆往下延伸

1
2
3
4
5
6
7...

因此打印出來的內容會是舊到新
有辦法使最新的內容在最上面嗎?

7...
6
5
4
3
2
1
阅读 2.6k
2 个回答

最暴力的方式,直接将文件读入数组后翻转。但是不适用于大文件

$file = file('a.txt');
$result = array_reverse($file);

如果你是用的Linux系统,请往下看,否则请退出。

在Linux系统里,我们都知道有一个命令叫做cat,它不是猫的意思,据有人考证是catenate的缩写,而catenate是另一个我们熟悉的concatenate的同义词,据各种英汉词典的解释,这两个词的意思就是串联或者链状的意思,但在Linux里,其本质内容不过就是把一个文本文件的内容打印在屏幕上。

以上只是背景介绍。有意思的地方在于cat命令的反义词tac,这个命令也可以把一个文本文件的内容打印出来,但是顺序是反的!它先打印这个文本文件的最后一行,然后是倒数第二行,然后是倒数第三行。。。直到第一行。

例如这样:tac input.txt > /tmp/output.txt,这样你就得到了一个倒着来的文件。

接下来好办了。你在php里调用上面这个命令,生成一个临时文件,然后你读取这个临时文件的内容。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题