我有一个这种形式的大文本文件:
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;
这显示了最后一行。任何想到这个都会很棒!谢谢! 编辑:所有块都用空行分隔,脚本应该打印最后几个块。
答案 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);