尽管我覆盖了文件句柄变量,但每次打开新文件时是否需要关闭文件句柄?
例如:
$fp = fopen("example.txt", 'w');
$fp = fopen("example.html", 'w');// is the file handle to example.txt closed now?
fclose($fp);
我在一个循环内创建了几个文件,我考虑是否需要关闭循环内每个文件的句柄,或者在循环完成后关闭一次。
尽管我覆盖了文件句柄变量,但每次打开新文件时是否需要关闭文件句柄?
例如:
$fp = fopen("example.txt", 'w');
$fp = fopen("example.html", 'w');// is the file handle to example.txt closed now?
fclose($fp);
我在一个循环内创建了几个文件,我考虑是否需要关闭循环内每个文件的句柄,或者在循环完成后关闭一次。
当初始句柄的内存被释放时,您的系统可能会清理指针并关闭它。使用以下脚本:
$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
的 on example.txt
,它无论如何都会被 Zend 引擎隐式关闭,就像它会在脚本执行结束时关闭打开的句柄一样(即通过引用计数)。
但是,我仍然建议您正确且明确地关闭任何文件句柄,特别是考虑到您的用例 - 在循环中打开多个文件句柄的内存影响应该足以引起关注。再加上长时间运行的脚本可能会锁定文件,安全考虑的任何问题,最好正确清理句柄。
文件句柄将仍然打开,直到您调用fclose()
您所做的只是覆盖变量,失去对先前句柄的任何引用。如果您仍然需要控制它们,请将它们分配给不同的变量。
垃圾收集器通常必须从内存中删除没有引用的对象,但这并不总是发生。