用PHP读取文本文件中的特定行

时间:2015-05-03 06:48:53

标签: php file-io seek

我想使用PHP在文本文件中从第51行到第100行阅读。

文本文件在任何给定时间都包含少于500行。

我想从51到100行读取。没有其他行。

我希望你理解这个问题。我曾经多次使用SO而且喜欢它。在任何地方都找不到这个答案。

任何帮助将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:1)

使用whilefopenfeof(适用于阅读大文件8)),如下所示:

<?php
function retrieveText($file, $init, $end, $sulfix = '')
{
    $i = 1;
    $output = '';

    $handle = fopen($file, 'r');
    while (false === feof($handle) && $i <= $end) {
        $data = fgets($handle);

        if ($i >= $init) {
            $output .= $data . $sulfix;
        }
        $i++;
    }
    fclose($handle);

    return $output;
}

关于如何使用此函数获取第51行到第100行的示例:

echo retrieveText('myfile.txt', 51, 100);

添加折断线:

echo retrieveText('myfile.txt', 51, 100, PHP_EOL);

在html中添加分隔线:

echo retrieveText('myfile.txt', 51, 100, '<br>');

答案 1 :(得分:1)

根据Guilherme的例子,在这里发布另一个例子:

在我的盒子上测试了Guilherme的代码之后,我发现它在使用feof()时遇到了错误,而他的代码应该有效(逻辑是合理的),它确实会破坏。

以下方法(以与他相同的方式使用)应该是一个替代工作。

function retrieveText($file, $min, $max)
{
    $output = Array();

    $line = -1;
    $handle = fopen($file, 'r');
    while(!feof($handle)) {
        $line++;
        if(($line >= $min && $line <= $max)) {
            $output[] = fgets($handle);
        } elseif($line > $max) {
            break;
        } else {
            fgets($handle);
        }
    }
    fclose($handle);
    return implode("\n", $output);
}

请注意,这会使用回车符分隔每一行"\n",您可以将其更改为"<br />"或您喜欢的任何内容,具体取决于您显示结果的位置。