PHP:如何向后搜索以找到最后N行

问题描述

| 我想我可以叫tail,但这意味着要依赖外部程序。有没有一种方法可以有效地仅使用PHP? 更新:对于那些感兴趣的人,我遵循了我在可接受的答案中得到的建议,并尝试对自己实施。把它放在我的博客上=)     

解决方法

基本上,您必须复制
tail
。打开文件,跳到最后,然后开始向后阅读。读取一个块,计数换行符,重复直到换行符计数>所需的行数,然后转储从那个换行符开始的所有内容。     ,那么,您想要字符串的最后
n
行吗?
function getLastLines($string,$n = 1) {
    $lines = explode(\"\\n\",$string);

    $lines = array_slice($lines,-$n);

    return implode(\"\\n\",$lines);
}
然后,您可以使用ѭ3this来调用它,其中ѭ4a是一个正整数,ѭ5you是您想要截取的字符串。 如果您想要其他东西,例如使用文件作为源,您将需要一些不同的东西-也许使用
file
而不是
explode
。     ,最简单的方法是使用文件。它将整个文件加载到一个数组中,每项一行。使用count来计算总行数,然后从该索引中减去100 en即可对行进行所需的操作。 http://nl.php.net/manual/en/function.file.php 对于非常大的文件,这并不是很有效。然后,最好使用fstat获取文件大小,fseek返回x字节数,计算可以读取的行数,并可能进一步查找,直到找到100行。我敢打赌像tail这样的工具从一开始就不会算在内,但会做类似的事情。     ,如果使用file()作为数组读取文件,则可以使用array_splice指定最后N行: test.txt
1
2
3
4
5
6
7
8
9
10
test.php
$lines = file(\'test.txt\');
$line_number = 5;

echo implode(\"\",array_splice($lines,count($lines) - $line_number));
输出
$ php test.php
6
7
8
9
10