我來自一個C和C++背景,但也有一些網絡的東西玩。所有的美國C鄉親(希望)知道,做一個讀之前調用一個FILE*
feof
是錯誤的。這是經常給C和C++帶來新手的東西。 PHP的實現也是這種情況嗎?PHP的FEOF行爲與C'S
我想,這一定是因爲該文件可能是一個插座或其他任何地方不可能知道讀完之前的大小。但是,幾乎所有的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
調用期間獲取文件大小,但這不適用於所有類型的文件資源,導致不一致的行爲,並且速度會變慢。
您是否創建了您的帳戶才能爲我們提供這項寶貴的貢獻? – 2010-07-13 17:33:25
在C中,在可以設置EOF標誌的操作之前調用'feof'肯定是一個邏輯錯誤。 'fopen'不是那些操作之一。 – 2010-07-13 17:46:13
Arrrggghhh!這當然不是一個錯誤,邏輯,語法或其他。這是完全有效的。如果你明白它的作用 - 它會像預期的那樣行事,就像上面解釋的MightyE一樣。這個問題構成了一個錯誤;不是這樣。 – Anonymous 2010-07-19 21:00:18