LMLPHP后院

PHP 内存泄露重现 include 匿名函数技术

maybe yes 发表于 2022-05-01 10:11

这个坑估计全网没有人踩过,这篇应该是公开出来的第一篇,很多人就算是踩了这个坑,也不一定会触发,即使是触发了,也不一定发现的了。

这个是 include 或者是 require 对于匿名函数的内存泄露大坑。

很多市面上的 PHP 教程都说 include require 相当于把代码复制到那个位置,从这个代码示例验证来看,其实不是这样的!

$i=0;
while (true) {
        if ($i%1000 == 0) {
                echo memory_get_usage()."\n";
                sleep(1);
        }
        $i++;
        $b = 'b';
        $render_func = function($d) use ($b) {
                $u = 1;
                //test3.php $x = function(){};
                require 'test3.php';
        };
        $render_func($i);
}
return;

上面的代码内存泄露!每运行 1000 次增加 2M 内存左右!但是如果将 require 里面的代码直接放在那里,不会有内存泄露问题!

要弄懂这个问题,得重新分析下源代码了!

2022-05-21 19:30:32 1653132632 0.025172