关闭无法打开的文件是否有意义

时间:2011-12-19 16:46:43

标签: php file fopen

我正在审核由其他开发人员编写的代码。代码尝试打开文件,并根据成功/失败设置$canOpen

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

我觉得很奇怪的是它也会尝试关闭文件,但只有当打开失败时才会if (!$fh)。这有意义吗?文件成功打开后,关闭是否应该在else语句中?

4 个答案:

答案 0 :(得分:1)

不,这没有任何意义。

如果满足!$fh作为条件,则意味着$fh包含布尔FALSE(或者,如果出现一些奇怪的内部PHP错误,NULL) 。所以你实际做的是:

fclose(FALSE);

......这是毫无意义的,会导致错误。

而且,如果你要做的就是填充$canOpen变量而不对文件句柄做任何有用的事情,那么is_file()is_readable()is_writable()足够吗?

答案 1 :(得分:1)

关闭未打开文件的唯一原因是它是否用于弹性目的。例如,始终关闭finally的{​​{1}}块中的文件。

在您的情况下,它看起来像编码错误。

答案 2 :(得分:1)

如果你将var_dump($ fh)放在if的true块中,你会发现它不是资源句柄。

fclose占用资源的php manual states。因此,无法在无法打开的文件上调用fclose。

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

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

答案 3 :(得分:1)

不,它没有意义,如果你无法打开文件,你就不需要关闭它了。此时,filepointer始终处于打开状态,因为如果文件不存在,则会创建一个文件。