虽然覆盖了文件句柄变量,但每次打开新文件时是否需要关闭文件句柄?
例如:
$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
这意味着,在example.txt
上没有显式fclose
的情况下,Zend引擎无论如何都会隐式关闭它,就像它在脚本执行结束时关闭打开的句柄一样(即通过引用计数)。
但是,我仍然建议您正确而明确地关闭任何文件句柄,特别是考虑到您的用例-在循环中打开多个文件句柄对内存的影响应该足够令人担忧了。除此之外,如果长时间运行的脚本可能会占用文件的锁,出于安全考虑,最好正确清理句柄。
另请参阅:在PHP中写入文件后,为什么需要fclose
?
在调用fclose()
之前,文件句柄仍将打开
您所做的只是覆盖变量,丢失对上一个句柄的任何引用。如果您仍然需要控制它们,请将它们分配给不同的变量。
垃圾收集器通常必须从内存中删除没有引用的对象,但这种情况并不总是发生。