我可以通过取消设置手柄来关闭文件吗?

hak*_*kre 5 php resources

如果我可以fclose通过取消设置带有句柄的变量来省略命令,我有点困惑?

$handle = fopen($file);
...
fclose($handle);

... // script goes on for a long
Run Code Online (Sandbox Code Playgroud)

和....相比:

$handle = fopen($file);
...
unset($handle);

... // script goes on for a long
Run Code Online (Sandbox Code Playgroud)

任何人见解?

lan*_*nzz 2

PHP 文档暗示所有没有剩余引用的资源都被“释放”,我假设对于文件句柄,这将包括关闭文件。

简单的测试用例:

$f = fopen("test.php", "r");
if (!flock($f, LOCK_EX)) {
  print("still locked\n");
  exit;
}
unset($f);
sleep(5);
print("goodbye\n");
Run Code Online (Sandbox Code Playgroud)

(我已将其保存为test.php,因此它会自行锁定;否则可能需要将 中的文件名更改为fopen()某个现有文件)

5秒内运行脚本两次;如果您“仍然锁定”,那么显然松开手柄并没有释放锁定。在我的测试中,我没有仍然锁定”,因此显然取消设置句柄至少会释放锁,尽管在垃圾收集时释放锁而不关闭文件似乎很愚蠢。