关闭无法打开的文件是否有意义
我在审阅其他开发人员编写的代码。该代码尝试打开文件,并根据成功/失败设置$canOpen
。关闭无法打开的文件是否有意义
$fh = @fopen('files.php', 'a+');
if (!$fh){
fclose($fh);
$canOpen = false;
} else {
$canOpen = true;
}
我感到奇怪的是,它也试图关闭该文件,但只有当打开失败if (!$fh)
。这有意义吗?当文件成功打开时,不应该在else语句中关闭吗?
不,这没有意义。
如果!$fh
被满足为条件,这意味着$fh
包含布尔FALSE
(或可能地,在一些怪异内部PHP的错误,NULL
的情况下)。所以你实际上做的是:
fclose(FALSE);
......这是毫无意义的,会导致错误。
而且,如果你正在试图做的是填充$canOpen
变量并没有做任何的文件句柄有用的所有,不会的is_file()
,is_readable()
和is_writable()
组合就足够了?
好点,谢谢。 – sameold 2011-12-19 17:03:21
关闭一个未打开的文件的唯一原因是它是否用于恢复目的。例如,始终关闭try...catch
的finally
块中的文件。
就你而言,它看起来像一个编码错误。
如果您将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始终打开,因为如果文件不存在,它将创建一个文件。
是的,这将是我的假设。我的猜测是现在的样子会出错? – Robert 2011-12-19 16:50:19