使用fseek逐行读取文件

如何使用fseek逐行读取文件?

代码可能会有所帮助。必须是跨平台和纯PHP。

提前谢谢了

回答:

问题是使用fseek进行询问,因此只能假定性能是一个问题,而file()不是解决方案。这是使用fseek的一种简单方法:

我的file.txt

#file.txt

Line 1

Line 2

Line 3

Line 4

Line 5

和代码:

<?php

$fp = fopen('file.txt', 'r');

$pos = -2; // Skip final new line character (Set to -1 if not present)

$lines = array();

$currentLine = '';

while (-1 !== fseek($fp, $pos, SEEK_END)) {

$char = fgetc($fp);

if (PHP_EOL == $char) {

$lines[] = $currentLine;

$currentLine = '';

} else {

$currentLine = $char . $currentLine;

}

$pos--;

}

$lines[] = $currentLine; // Grab final line

var_dump($lines);

输出:

array(5) {

[0]=>

string(6) "Line 5"

[1]=>

string(6) "Line 4"

[2]=>

string(6) "Line 3"

[3]=>

string(6) "Line 2"

[4]=>

string(6) "Line 1"

}

您不必像我一样附加到$ lines数组,如果这是脚本的目的,则可以立即打印输出。如果要限制行数,也很容易引入计数器。

$linesToShow = 3;

$counter = 0;

while ($counter <= $linesToShow && -1 !== fseek($fp, $pos, SEEK_END)) {

// Rest of code from example. After $lines[] = $currentLine; add:

$counter++;

}

以上是 使用fseek逐行读取文件 的全部内容, 来源链接: utcz.com/qa/401123.html

回到顶部