php feofファイルの末尾文字を識別する方法

1228 ワード

EOFは非常に重要な概念であり、ほとんどの主流のプログラミング言語では、解析器がファイルEOFに到達したかどうかを検証するために対応する内蔵関数が提供されています.PHPでは、この関数はfeof()です.feof()関数は、リソースの最後に到達するかどうかを決定するために使用されます.ファイルI/O操作でよく使用されます.形式は次のとおりです.
int feof(string resource)
例は次のとおりです.
 
  
$fh = fopen("/home/www/data/users.txt", "rt");
while (!feof($fh)) echo fgets($fh);
fclose($fh);
?>

bool feof ( resource $handle ):Tests for end-of-file on a file pointer
このphp manualの上の原話.
便利にするために、私は以前このように使っていました.
 
  
// if file can not be read or doesn't exist fopen function returns FALSE
$file = @fopen("no_such_file", "r");
// FALSE from fopen will issue warning and result in infinite loop here
while (!feof($file)) {
}
fclose($file);
?>

確かに、このように使うのは簡単です.しかし、上記の変数$fileが合法的なfile pointerでないか、fcloseによって閉じられている場合.
プログラムの6行目に出るとwaringが発生し,デッドサイクルが発生する.
どうして?
理由は
Returns TRUE if the file pointer is at EOF or an error occurs (including socket timeout); otherwise returns FALSE.
だから、安全のために、上のコードを使うときに判断をつけたほうがいいです.is_resourceは安全です.