fopenは使いどころを誤ると無限ループに陥る件

2010年4月30日

次のようなコードは危険な場合がある。

$fp = fopen(“ファイル","r");
while(!feof($fp))
{

}
fclose($fp);

これは、ファイルがもし無い場合、!feof($fp)がずっと真になってしまい、無限ループするからである。

解決法は

$fp = @fopen(“ファイル","r");
if( $file )
{
while(!feof($fp))
{

}
fclose($fp);
}

このようにエラー制御子@を使う事で、fopenの時点でFALSEをしっかり返され、
次のifでwhileに入らずに済む。