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