php - 从文本文件输出最后一个文本块(用空行分隔)

时间:2013-05-22 11:31:56

标签: php output

我有一个这种形式的大文本文件:

This is a linie of text.
This is a linie of text.
This is a linie of text.
This is a linie of text.

This is a linie of text.
This is a linie of text.

This is a linie of text.
This is a linie of text.
This is a linie of text.

等。 我想在我的网站上输出这个文件的最后几块/块文本。 我目前使用这个:

$line = '';

$f = fopen('output.log', 'r');
$cursor = -1;

fseek($f, $cursor, SEEK_END);
$char = fgetc($f);

/**
 * Trim trailing newline chars of the file
 */
while ($char === "\n" || $char === "\r") {
    fseek($f, $cursor--, SEEK_END);
    $char = fgetc($f);
}

/**
 * Read until the start of file or first newline char
 */
while ($char !== false && $char !== "\n" && $char !== "\r") {
    /**
     * Prepend the new char
     */
    $line = $char . $line;
    fseek($f, $cursor--, SEEK_END);
    $char = fgetc($f);
}

echo $line;

这显示了最后一行。任何想到这个都会很棒!谢谢! 编辑:所有块都用空行分隔,脚本应该打印最后几个块。

4 个答案:

答案 0 :(得分:1)

除非文件非常大,否则你可以将其爆炸

$allLines = explode("\n", file_get_contents('your/file') );
$endLines = array_slice( $allLines, -2 );
echo implode("\n", $endLines );

如果你想匹配包含任意行数的块,你可能会爆发双线换行" \ n \ n"

如果空格字符不可靠,则可以使用preg_match。 e.g。

$allBlocks = preg_split( '/[\n\r]\s*[\n\r]/', file_get_contents('your/file'), -1, PREG_SPLIT_NO_EMPTY );

答案 1 :(得分:0)

使用file_get_contents()explode双新行读取文件,然后使用array_pop()选出最后一个元素。

答案 2 :(得分:0)

这里去:

file.txt的

This is a linie of text.
This is a linie of text.
This is a linie of text.
This is a linie of text.

This is a linie of text.
This is a linie of text.

This is a linie of text.
This is a linie of text.
This is a linie of text.

process.php:

$fileContents = file('file.txt', FILE_SKIP_EMPTY_LINES);
$numberOfLines = count($fileContents);

for($i = $numberOfLines-2; $i<$numberOfLines; $i++)
{
    echo $fileContents[$i];
}

这将从文件

输出最后2行文本

或者,使用substr返回最后50个字母:

$fileContents = file_get_contents('file.txt');
echo subtr($fileContents, -50, 50);

答案 3 :(得分:0)

对于大文件,此代码的工作速度比正则表达式快。

$mystring = file_get_contents('your/file');    
$pos = strrpos($mystring, "\n")
if($pos === false)
    $pos = strrpos($mystring, "\r");
$result = substr($mystring, $pos);