PHP:如何向后查找最后 N 行

发布于 2024-11-10 06:16:06 字数 209 浏览 2 评论 0原文

我想我可以调用 tail,但这意味着依赖于外部程序。有没有一种方法可以仅使用 PHP 来有效地做到这一点?


更新:对于那些感兴趣的人,我遵循了在已接受的答案中得到的建议,并尝试在自己身上实施。将其放在我的博客上 =)

I suppose I could call tail, but that would mean depending on an external program. Is there a way to do this in an efficient way using only PHP?


Update: For those interested, I followed the advice I got in the accepted answer and tried to implement on myself. Put it on my blog =)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

芸娘子的小脾气 2024-11-17 06:16:06

那么您想要字符串的最后 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

So you want the last n lines of a string?

function getLastLines($string, $n = 1) {
    $lines = explode("\n", $string);

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

    return implode("\n", $lines);
}

You can then call this with getLastLines($str, $num);, where $num is a positive integer and $str is a string you want to chop up.

If you want something different, e.g. using a file as the source, you'll need something different -- perhaps using file instead of explode.

夕嗳→ 2024-11-17 06:16:06

基本上,您必须重现tail。打开文件,跳到末尾,然后开始向后阅读。读取一个块,计算换行符,重复直到换行符计数>所需的行数,然后转储从该换行符开始的所有内容。

You'd have to reproduce tail, basically. Open the file, jump to the end, then start reading backwards. Read a chunk, count line breaks, repeat until linebreak count > number of lines desired, then dump out everything from that one linebreak onwards.

清音悠歌 2024-11-17 06:16:06

最简单的方法是使用文件。它将整个文件加载到一个数组中,每个项目一行。使用 count 来计算总行数,从该索引中减去 100 en,您可以对行执行您想要的操作。

http://nl.php.net/manual/en/function.file.php

对于非常大的文件,这并不是很有效。然后你最好使用 fstat 来获取文件大小,使用 fseek 返回 x 个字节数,计算可以读取的行数,并可能进一步查找,直到找到 100 行。我敢打赌像 tail 这样的工具不会从一开始就计数,但会做类似的事情。

The easiest way is to use file. It loads the whole file in an array, one line per item. Use count to count the total linecount, subtract 100 en from that index you can do what you want with the lines.

http://nl.php.net/manual/en/function.file.php

For very large files, this is not really efficient. Then you better use fstat to get the filesize, fseek to go back an x number of bytes, count the number of lines you can read en possibly seek further back until you have found 100 lines. I bet tools like tail don't count from the beginning but do something similar.

你不是我要的菜∠ 2024-11-17 06:16:06

如果您使用 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

If you use file() to read in the file as an array, you can then use array_splice to specify the last N lines:

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));

output

$ php test.php
6
7
8
9
10
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文