问题是使用fseek进行询问,因此只能假定性能是一个问题,而file()不是解决方案。这是使用fseek的一种简单方法:
我的file.txt
#file.txtLine 1Line 2Line 3Line 4Line 5
和代码:
<?php$fp = fopen('file.txt', 'r');$pos = -2; // Skip final new line character (Set to -1 if not present)$lines = array();$currentLine = '';while (-1 !== fseek($fp, $pos, SEEK_END)) { $char = fgetc($fp); if (PHP_EOL == $char) { $lines[] = $currentLine; $currentLine = ''; } else { $currentLine = $char . $currentLine; } $pos--;}$lines[] = $currentLine; // Grab final linevar_dump($lines);输出:
array(5) { [0]=> string(6) "Line 5" [1]=> string(6) "Line 4" [2]=> string(6) "Line 3" [3]=> string(6) "Line 2" [4]=> string(6) "Line 1"}您不必像我一样附加到$ lines数组,如果这是脚本的目的,则可以立即打印输出。如果要限制行数,也很容易引入计数器。
$linesToShow = 3;$counter = 0;while ($counter <= $linesToShow && -1 !== fseek($fp, $pos, SEEK_END)) { // Rest of pre from example. After $lines[] = $currentLine; add: $counter++;}


