gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 14:04:23 26 4
gpt4 key购买 nike

我有点疑惑是否可以通过取消设置带有句柄的变量来节省 fclose 命令?

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

... // script goes on for a long

相比于:

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

... // script goes on for a long

有人有见解吗?

最佳答案

Thanks to the reference-counting system introduced with PHP 4's Zend Engine, a resource with no more references to it is detected automatically, and it is freed by the garbage collector.

考虑一下这意味着什么。可以安全地假设变量的所有痕迹在垃圾回收后都消失了。换句话说,在 PHP 执行结束时,如果 PHP 不在跟踪引用,它将如何关闭它?因此,当垃圾收集器吃掉它时它会关闭它似乎是相当合乎逻辑的。

虽然这是一个糟糕的逻辑论证,因为它假定垃圾回收会立即或在取消设置后不久发生,并且 PHP 不会保留对用户空间中不再存在的变量的隐藏引用。


如果 PHP 在超出范围时没有关闭文件句柄,则一个更引人注目的案例可能是一个潜在的行为缺陷。考虑某种打开大量文件的守护进程。现在考虑是否从未调用过 fclose。相反,允许变量超出范围或显式调用 unset。

如果这些文件句柄没有关闭,这个长时间运行的守护进程将耗尽文件句柄。


潜在行为特定的测试脚本:

<?php

$db = mysql_connect(...);

if ($db) {
echo "Connected\n";
sleep(5); //netstat during this just for paranoia
unset($db);
echo "Unset\n";
sleep(5); //netstat during this and the connection is closed
}

在 Windows 7 和 Debian 6 上,取消设置后连接已关闭。

很明显,这只能证明在我的特定机器上我的特定 PHP 版本可以正常工作。对文件句柄等没有任何意义:)。


正在搜索 PHP 源代码以寻找确凿的证据

关于php - 我可以通过取消设置句柄来关闭文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10928892/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com