当前位置:  开发笔记 > 编程语言 > 正文

file_get_contents()使用的内存在未分配给变量时是否会被释放?

如何解决《file_get_contents()使用的内存在未分配给变量时是否会被释放?》经验,为你挑选了1个好方法。

当我使用file_get_contents并将其作为参数传递给另一个函数而不将其分配给变量时,是否在脚本执行完成之前释放了该内存?

例如:

preg_match($pattern, file_get_contents('http://domain.tld/path/to/file.ext'), $matches);

file_get_contents使用的内存是否会在脚本完成之前释放?



1> Paul Dixon..:

为销容文件内容而创建的临时字符串将被销毁.在没有深入研究来源的情况下,可以通过以下几种方法测试作为函数参数创建的临时值是否被破坏:

方法1:报告其销毁的类

这通过使用报告其自身消亡的类来证明生命周期:

class lifetime
{
    public function __construct()
    {
         echo "construct\n";
    }
    public function __destruct()
    {
         echo "destruct\n";
    }


}

function getTestObject()
{
   return new lifetime();
}


function foo($obj)
{
   echo "inside foo\n";
}




echo "Calling foo\n";
foo(getTestObject());
echo "foo complete\n";

这输出

Calling foo
construct
inside foo
destruct
foo complete

这表示隐含的临时变量在foo函数调用之后销毁.

方法2:测量内存使用情况

这是另一种方法,它使用memory_get_usage来测量我们消耗了多少进一步的确认.

function foo($str)
{
   $length=strlen($str);

   echo "in foo: data is $length, memory usage=".memory_get_usage()."\n";
}

echo "start: ".memory_get_usage()."\n";
foo(file_get_contents('/tmp/three_megabyte_file'));
echo "end: ".memory_get_usage()."\n";

这输出

start: 50672
in foo: data is 2999384, memory usage=3050884
end: 51544

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有