Bir değişkene atanmamış zaman file_get_contents tarafından kullanılan bellek () serbest olsun mu?

2 Cevap php

Ben file_get_contents kullanmak ve bir değişkene atamadan, başka bir işleve parametre olarak geçerken, bu hafıza komut dosyası yürütme tamamlanmadan önce serbest olsun demek?

Örneğin:

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

Komut tamamlanmadan önce file_get_contents tarafından kullanılan bellek çıkacak?

2 Cevap

Dosya içeriğini tutmak için oluşturulan geçici bir string imha edilecek. Onaylamak için kaynaklar içine inmeden, burada bir fonksiyon parametre olarak oluşturulan geçici bir değer yok olur ki test edebilirsiniz yolları bir çift var:

Method 1: a class which reports its destruction

Bu, kendi ölümü üzerine raporlar sınıfını kullanarak kullanım gösterir:

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";

Bu çıkışlar

Calling foo
construct
inside foo
destruct
foo complete

Zımni geçici değişken is sağ foo işlev çağrısından sonra tahrip olduğunu gösterir.

Method 2: measure memory usage

İşte memory_get_usage biz tüketilen ettik ne kadar ölçmek için kullanarak daha fazla onay sunan başka bir yöntem.

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";

Bu çıkışlar

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

= 6493720 kod bellek kullanımını aşağıdaki

başlangıç: 1050504

end: 6492344

echo "start: ".memory_get_usage()."\n";
$data = file_get_contents("/six_megabyte_file");
echo "end: ".memory_get_usage()."\n";

ancak kod = 1049680 aşağıdaki bellek kullanımı

start = 1050504

end = 1050976

echo "start: ".memory_get_usage()."\n";
file_get_contents("/six_megabyte_file");
echo "end: ".memory_get_usage()."\n";

Note: in first code file stores in a variable.