私はCとC++のバックグラウンドを持っていますが、いくつかのWeb関連のものでも遊んでいます。私たちすべてのCの人々は(願わくば)、読み取りを行う前feof
にaを呼び出すことはエラーであることを知っています。FILE*
これは、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
の前に呼び出すのは間違っていますか?fread
PHPがCのバージョンとは異なる方法でこれを行うことができる方法はいくつかありますが、欠点があると思います。
デフォルトで!EOFにすることができます。一部のコーナーケースでは正しくない可能性があるため、これは最適ではありません。
呼び出し中にファイルサイズを取得することはできました
fopen
が、これはすべての種類のファイルリソースで機能するわけではなく、一貫性のない動作が発生し、速度が低下します。