每次打开新文件时是否需要关闭文件句柄,尽管我会覆盖文件句柄变量?
e.g:
$fp = fopen("example.txt", 'w');
$fp = fopen("example.html", 'w');// is the file handle to example.txt closed now?
fclose($fp);
我正在循环中创建几个文件,我想是否需要关闭循环内的每个文件的句柄或循环结束后的一次。
答案 0 :(得分:2)
当释放初始句柄的内存时,系统可能清理指针并将其关闭。使用以下脚本:
$fp = fopen("example.txt", 'w');
$fp = fopen("example.html", 'w');
while (true);
我从inotifywait -m -r .
得到以下输出:
MODIFY example.txt
OPEN example.txt
MODIFY example.html
OPEN example.html
CLOSE_WRITE,CLOSE example.txt
这意味着在fclose
上没有明确的example.txt
,Zend引擎无论如何都会隐式关闭它,就像在脚本执行结束时关闭一个打开的句柄一样(即reference-counting)。
但是,我仍然会建议您正确并明确地关闭所有文件句柄,特别是考虑到您的用例 - 在循环中打开多个文件句柄的内存含义应该足够关注。再加上长期运行脚本的任何问题可能会抓住文件上的锁,安全性考虑因素,最好正确清理句柄。
答案 1 :(得分:0)
在您致电fclose()
您所做的就是覆盖变量,丢失对前一个句柄的任何引用。 如果您仍需要控制它们,请将它们分配给不同的变量。
垃圾收集器通常必须删除没有内存引用的对象,但这并不总是发生。