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

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

问题描述:

我在审阅其他开发人员编写的代码。该代码尝试打开文件,并根据成功/失败设置$canOpen关闭无法打开的文件是否有意义

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

我感到奇怪的是,它也试图关闭该文件,但只有当打开失败if (!$fh)。这有意义吗?当文件成功打开时,不应该在else语句中关闭吗?

+0

是的,这将是我的假设。我的猜测是现在的样子会出错? – Robert 2011-12-19 16:50:19

不,这没有意义。

如果!$fh被满足为条件,这意味着$fh包含布尔FALSE(或可能地,在一些怪异内部PHP的错误,NULL的情况下)。所以你实际上做的是:

fclose(FALSE); 

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

而且,如果你正在试图做的是填充$canOpen变量并没有做任何的文件句柄有用的所有,不会的is_file()is_readable()is_writable()组合就足够了?

+0

好点,谢谢。 – sameold 2011-12-19 17:03:21

关闭一个未打开的文件的唯一原因是它是否用于恢复目的。例如,始终关闭try...catchfinally块中的文件。

就你而言,它看起来像一个编码错误。

如果您将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; 
} 

不,它是没有意义的,如果你不能打开文件,你将不需要关闭它eigther。此时filepointer始终打开,因为如果文件不存在,它将创建一个文件。