我想我可以调用tail,但这意味着取决于外部程序。有没有办法以有效的方式使用PHP?PHP:如何向后寻找最后N行
更新:对于那些有兴趣,我也跟着我接受的答案得到的建议,并试图对自己实施。把它on my blog =)
我想我可以调用tail,但这意味着取决于外部程序。有没有办法以有效的方式使用PHP?PHP:如何向后寻找最后N行
更新:对于那些有兴趣,我也跟着我接受的答案得到的建议,并试图对自己实施。把它on my blog =)
你基本上必须重现tail
。打开文件,跳到最后,然后开始向后读。读取一个块,计算换行符,重复,直到换行次数>所需行数,然后从该行换行开始转储所有内容。
那么你想要最后的n
行的一个字符串?
function getLastLines($string, $n = 1) {
$lines = explode("\n", $string);
$lines = array_slice($lines, -$n);
return implode("\n", $lines);
}
可以再用getLastLines($str, $num);
,其中$num
是一个正整数,$str
称这是你要砍的字符串。
如果你想要有不同的东西,例如使用文件作为源文件,您需要不同的东西 - 可能使用file
而不是explode
。
虽然这会把整个事物都记忆成记忆,不是吗? – Svish 2011-05-26 19:28:54
对......我认为目标是使用'a +'模式调用'fopen()'并向后寻找...不首先读取整个文件。 – 2011-05-26 19:29:43
@Svish如果你在一个文件中搜索,是的。你的问题是模糊的... – lonesomeday 2011-05-26 19:29:57
最简单的方法是使用文件。它将整个文件加载到一个数组中,每行一行。使用count来计算总的行数,从该索引中减去100 en,你可以用这些行来做你想做的事情。
http://nl.php.net/manual/en/function.file.php
对于非常大的文件,这是不是真的有效。那么你最好使用fstat来获取文件大小,fseek返回x个字节,计算你可以读取的行数,并且可能寻找更远的行,直到找到100行。我敢打赌,像尾巴这样的工具从一开始就不算,而是做类似的事情。
如果使用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));
OU tput
$ php test.php
6
7
8
9
10
Aha。聪明。将不得不尝试一下,谢谢! – Svish 2011-05-26 19:29:22