我来自 C 和 C++ 背景,但也玩过一些网络东西。我们所有的 C 人(希望如此)都知道feof
在读取之前调用 aFILE*
是一个错误。这是经常刺痛 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中调用feof
an 之前是不正确的吗?fread
PHP 可以通过多种方式完成与 C 版本不同的操作,但我觉得它们也有缺点。
他们可以将其默认为!EOF。这是次优的,因为它对于某些极端情况可能是不正确的。
他们可以在调用期间获取文件大小
fopen
,但这不适用于所有类型的文件资源,从而产生不一致的行为并且速度会变慢。