我来自C和C++背景,但也涉猎一些Web技术。所有的C程序员(希望如此)都知道在读取之前调用
feof
是一个错误。这是初学者在C和C++中经常遇到的问题。PHP的实现是否也是如此?我认为一定是的,因为文件可能是套接字或其他任何不可能在完成读取之前知道大小的东西。但几乎所有的PHP示例(即使是在php.net上找到的示例)看起来都像这样(我的警报响了):$f = fopen("whatever.txt", "rb");
while(!feof($f)) {
echo fgets($f);
}
fclose($f);
我知道最好这样写以避免这个问题:
$f = fopen("whatever.txt", "rb");
while($line = fgets($f)) {
echo $line;
}
fclose($f);
但这不是重点。我试图测试如果我用“错误的方法”做会有什么失败,但我无法导致不正确的行为。这不是非常科学,但我认为值得一试。
那么,在 PHP 中在 fread
之前调用 feof
是不正确的吗?
PHP 可以有几种不同于 C 的方式来处理这个问题,但我觉得它们都有缺点。
他们可以将默认值设置为 !EOF。这是次优的,因为它可能对某些特殊情况不正确。
他们可以在
fopen
调用期间获取文件大小,但这不能在所有类型的文件资源上工作,导致不一致的行为并且会更慢。
foef
是否与C中的行为相同。谢谢。 - Evan Teran