PHP:fgets 相当于从文件的_底部_读取?

发布于 2024-12-03 06:32:01 字数 65 浏览 0 评论 0原文

我有一个通过附加来更新自身的文件,但是该文件变得很大(500MB)。我想读取文件中的最后 50 行。这怎么能做到呢?

I have a file that updates itself by appending, however this file becomes huge (500MB). I would like to read the last 50 lines in the file. How can this be done?

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

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

发布评论

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

评论(2

谁许谁一生繁华 2024-12-10 06:32:01

tail -n50 将返回文件的最后 50 行。

$filename = 'test.html';
$output = shell_exec('exec tail -n50 ' . $filename);
echo $output;

因此,您不必将整个文件加载到内存中。

编辑:

如果您想在每行之后回显“
”:

echo str_replace(PHP_EOL, '<br />', $output);

Tail -n50 will return the last 50 lines of the file.

$filename = 'test.html';
$output = shell_exec('exec tail -n50 ' . $filename);
echo $output;

Therefore, you don't have to load the entire file in memory.

Edit:

If you want to echo "<br>" after each line you do:

echo str_replace(PHP_EOL, '<br />', $output);
著墨染雨君画夕 2024-12-10 06:32:01

您需要使用fseek将文件指针从文件末尾移动一定数量的字节:

$fp = fopen('myfile','r');
fseek($fp,-1024, SEEK_END);
$last_kb_of_file = fgets($fp,1024);

您必须告诉fgets有多少您想要读取的字节数,而不是多少行。它不知道文件的格式是什么。您必须将结果拆分为换行符并查看是否有 50 行。

You'll need to use fseek to move the file pointer a certain number of bytes from the end of the file:

$fp = fopen('myfile','r');
fseek($fp,-1024, SEEK_END);
$last_kb_of_file = fgets($fp,1024);

You'll have to tell fgets how many bytes you want to read, not how many lines. It has no idea what the format of the file is. You'll have to split the result on a newline and see if you have 50 lines.

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