这是在PHP中读取文件时确定EOF的可接受方法吗?

时间:2011-06-23 10:21:41

标签: php file null feof fgetc

我对PHP很新,只​​是尝试转换我在C中所做的事情。从我教过的C文件中读取的习语是:

while ((c = getchar()) != EOF) {
    doSomethingWith(c);
}

我已经完成了一些阅读,似乎在PHP中执行此操作的“正确”方法是:

while (!feof($file)) {
    $c = fgetc($file);
    doSomethingWith($c);
}

我的问题是:可以将两者合并如下(我已经尝试过了,它在我的测试文件上运行正常),还是在EOF之前可以找到空的情况?:

while (($c = fgets($f)) != null) {
    doSomethingWith($c);
}

提前干杯

史蒂夫

2 个答案:

答案 0 :(得分:2)

没关系,但是你这样做的方式是错的(至少“根本不正确”)。 fgets()返回false,如果到达文件的末尾,则应该针对false进行测试。它适用于您,因为在使用布尔值进行比较时,您使用“简单”等式运算符(==),即nullfalse

  

返回最长为length的字符串 - 从handle指向的文件中读取1个字节。如果在文件指针中没有要读取的数据,则返回FALSE。

     

如果发生错误,则返回FALSE。

这意味着,它必须看起来像

while (($c = fgets($f)) !== false) {
    doSomethingWith($c);
}

答案 1 :(得分:0)

记录

fgets,以便在没有更多数据需要阅读时返回false。因此,技术上正确的解决方案将是

// Notice the !== [non-identical] operator below
while (($c = fgets($f)) !== false) {
    doSomethingWith($c);
}

这样做更好,因为fgets可以合法地返回一个空(零长度)字符串,当使用相等运算符时,该字符串将等于null。运算符!==还检查其操作数的类型,这样就可以了。