当我们在php中打开文件并且不关闭它时会发生什么?

时间:2015-02-05 11:56:55

标签: php file garbage-collection

这里有一些代码:

<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
echo fread($myfile,filesize("webdictionary.txt"));
# fclose($myfile);
?>

如果我不删除第三行中的评论会怎样?

3 个答案:

答案 0 :(得分:3)

PHP会在文档末尾或exit()之前自动关闭文件。

一旦解析了对文件的最后一次引用,PHP也会转储内存。

答案 1 :(得分:2)

当不再检测到引用时,垃圾收集器将释放资源。

引用PHP manual

  

感谢PHP 4的Zend引入的引用计数系统   引擎,检测到没有更多引用的资源   自动,并由垃圾收集器释放。为了这   原因是,很少需要手动释放内存。

     

注意:持久数据库链接是此规则的一个例外。他们   没有被垃圾收集器破坏。看到持久性   连接部分了解更多信息。

PHP的垃圾收集工作流程可以简单描述如下:

  • 使用常量值
  • 创建新变量时,将创建zval容器
  • GC会跟踪此容器的引用次数。
  • 当没有人引用此容器时,GC会将此添加到另一个称为root buffer
  • 的容器中
  • 只要root buffer已满,就会运行GC。
  • 您可以使用gc_collect_cycles()函数强制GC运行。

要了解有关PHP GC的更多信息,请咨询documentation

答案 2 :(得分:1)

一旦完成该过程,操作系统将释放其所有资源 - 分配的内存和文件描述符。所以没有什么事情会发生,除非代码继续进行 - 每个进程的文件描述符数量是有限的,一旦你完成它们就会发布它们通常很好的风格。