问题描述
|
我想我可以叫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