2011-12-19 18 views
2

私は別の開発者によって書かれたコードを検討しています。コードはファイルを開こうとし、成功/失敗に基づいて$canOpenを設定します。私は奇妙見つける何開くことができなかったファイルを閉じることは意味がありますか

$fh = @fopen('files.php', 'a+');   
if (!$fh){ 
    fclose($fh); 
    $canOpen = false; 
} else { 
    $canOpen = true; 
} 

は、それはまた、ファイルを閉じようとしていることが、オープンはif (!$fh)を失敗したときのみです。これは理にかなっていますか?ファイルが正常に開かれたときに、close文をelse文に入れるべきではありませんか?

+0

はい、それは私の前提です。私の推測は、今はエラーを与える方法ですか? – Robert

答えて

1

いいえ、意味がありません。

!$fhを条件として満たされた場合、それは$fhは(いくつかの奇妙な内部PHPエラー、NULLの場合に、又はおそらく)ブールFALSEを含むことを意味します。あなたが効果的にやっていることは次のとおりです。

fclose(FALSE); 

...無意味でエラーになります。

そして、あなたは $canOpen変数を移入し、ファイルハンドルに有用な何もしていないやろうとしているすべては、 is_file()is_readable()is_writable()の組み合わせは十分ではないでしょうか?

+0

良い点、ありがとう。 – sameold

1

未開封のファイルを復元する唯一の理由は、回復力を目的としている場合のみです。たとえば、finallyブロックのファイルを常に閉じる(try...catch)。

あなたの場合は、コーディングエラーのようです。

1

ifの真のブロックにvar_dump($ fh)を置くと、それはリソースハンドルではないことがわかります。

php manual states fcloseがリソースを取ること。したがって、fcloseは、開くことができないファイルに対して呼び出すことはできません。

<?php 
$fh = @fopen('files.php', 'a+'); 

if (!$fh){ 
    var_dump($fh); 
    fclose($fh); // this will cause an error 
    $canOpen = false; 
} else { 
    $canOpen = true; 
} 
1

いいえ、意味がありません。ファイルを開くことができない場合は、それを閉じる必要はありません。ファイルが存在しない場合は、ファイルを作成するため、この時点でファイルポインタは常に開いています。

関連する問題