Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取文件的最后一行,忽略空行或空白_Php - Fatal编程技术网

Php 获取文件的最后一行,忽略空行或空白

Php 获取文件的最后一行,忽略空行或空白,php,Php,我有一个用PHP解析的文件。文件的内容似乎以一个空白的新行结尾,有时还带有空格。我怎样才能删掉这一部分,得到真正的最后一行呢 我的文件有时看起来像 Line 1 Line 2 File content are here \n 或 或者有时候是正确的方法 Line 1 Line 2 File content are here 我需要我的脚本来解析文件的结尾,并返回真正的最后一行,即“这里的文件内容”(或者任何真正的内容,只是不是空行) 我在用下面的那一行试图得到最后一行。问题是,我并不总是

我有一个用PHP解析的文件。文件的内容似乎以一个空白的新行结尾,有时还带有空格。我怎样才能删掉这一部分,得到真正的最后一行呢

我的文件有时看起来像

Line 1
Line 2
File content are here 
\n

或者有时候是正确的方法

Line 1
Line 2
File content are here 
我需要我的脚本来解析文件的结尾,并返回真正的最后一行,即“这里的文件内容”(或者任何真正的内容,只是不是空行)

我在用下面的那一行试图得到最后一行。问题是,我并不总是知道X是什么。即使我真的认为我知道,文件末尾的换行符和空行也会让我发疯

fseek($file_handle, -X, SEEK_END);

您可以使用以下方法,该方法不会将整个文件加载到内存中(您可以使用它处理非常大的文件),并且允许在文件中的任何位置(而不是仅在末尾)有空行

while (($line = fgets($file_handle)) !== false) {
    if (($line != "\n") && ($line != "\r")) {
        // line is correct, process it
    }
}
此代码在每一行上迭代,然后检查该行是否不等于
\n
\r
,如果不是这样,则处理该行,否则将自动丢弃该行,代码将跳到下一行

您也可以使用PHP 5.1.0中引入的新接口,代码非常相似,工作方式相同:

$file = new SplFileObject("file.txt");

while (!$file->eof()) {
    $line = $file->fgets();
    if (($line != "\n") && ($line != "\r")) {
        // line is correct, process it
    }
}
我还忽略了一个事实,那就是你只需要我答案第一次修订的最后一行;一个简单的解决方案是在循环中定义一个变量,如果行是正确的(而不是空的/垃圾的),如果之后有行,该变量将被覆盖,但它将保持在最后一个正确的行上,然后您可以用它做任何您想做的事情

while (($line = fgets($file_handle)) !== false) {
    if (($line != "\n") && ($line != "\r")) {
        $last = $line
    }
}

if (isset($last)) {
    echo "you've got your last line"
}

就性能而言,这可能不是最好的解决方案,但绝对是最简单的,对于获取最后一行的更好方法,我建议您使用那些非常长且复杂的解决方案,如果您希望它们忽略空行,则需要对其进行修改。

在尝试查找最后一行之前,您可能希望对文件的内容使用。但是fopen是否将其完全加载到内存中?我想我对如何利用这样的trim感到困惑。试试
$trimmed\u contents=trim(file\u get\u contents('testfile.txt')
但是对于第一种方法,FGET从文件的顶部开始,不是吗?似乎浪费了很多处理时间。
while (($line = fgets($file_handle)) !== false) {
    if (($line != "\n") && ($line != "\r")) {
        $last = $line
    }
}

if (isset($last)) {
    echo "you've got your last line"
}