首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关闭一个无法打开的文件有意义吗

关闭一个无法打开的文件有意义吗
EN

Stack Overflow用户
提问于 2011-12-20 00:46:43
回答 4查看 115关注 0票数 2

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

代码语言:javascript
复制
$fh = @fopen('files.php', 'a+');        
if (!$fh){
   fclose($fh);
   $canOpen = false;
} else {
   $canOpen = true; 
}

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-12-20 00:52:43

不,这没有任何意义。

如果满足!$fh条件,则意味着$fh包含布尔值FALSE (或者,如果出现一些奇怪的内部PHP错误,则可能是NULL)。因此,您实际上正在做的是:

代码语言:javascript
复制
fclose(FALSE);

...which是没有意义的,并且会导致错误。

而且,如果您所要做的只是填充$canOpen变量,而没有对文件句柄做任何有用的事情,那么is_file()is_readable()is_writable()的组合还不够吗?

票数 1
EN

Stack Overflow用户

发布于 2011-12-20 00:53:22

关闭未打开的文件的唯一原因是它是出于弹性目的。例如,总是关闭try...catchfinally块中的文件。

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

票数 1
EN

Stack Overflow用户

发布于 2011-12-20 00:53:34

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

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

代码语言:javascript
复制
<?php
$fh = @fopen('files.php', 'a+');

if (!$fh){
    var_dump( $fh );
    fclose($fh); // this will cause an error
    $canOpen = false;
} else {
    $canOpen = true; 
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8564551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档