2012-01-17 20 views
10

PHP'de, harici bir URL'den bir görüntüyü GD kaynağına yüklemek için bir bellek içi (veya daha doğrusu, geçici bellek) dosyası kullanıyorum:Bir dosya nasıl silinir php: // temp wrapper

$file = 'php://temp/img'; 
copy($uri, $file); 
$src_img = @imagecreatefromjpeg($file); 

Ancak, anladığım kadarıyla, bu dosya imagecreatefromjpeg()'dan sonra kullanmamama rağmen bellekte kalır.

Bir php: // temp wrapper dosyası tarafından kullanılan belleği boşaltmanın bir yolu var mı?

Ya da en azından dosyanın artık kullanılmadığına dair bir işaret var mı?

+1

Bunun mümkün olduğundan emin değil - Umarım öyle değil, oldukça saçma görünüyor. Bununla birlikte, potansiyel bir çalışma, çok düşük bir bellek değeri ayarlamak için 'php: // maxmemory' kullanmaktır, bu nedenle veri her zaman diske yazılır ve bellek kullanımı düşüktür. Bunu yapacak olsanız da, sadece bir geçici dosya kullanın, tüm php: // temp' şey anlamsız render. – DaveRandom

cevap

5

php: // temp (veya bu konu için php: // bellek) dosyasında bir dosya oluşturduğunuzda, kaynak yalnızca komut dosyasının kullanım ömrünü uzatır. Bir kaynak tanıtıcısı almak için dosyayı fopen() kullanarak açarsanız, ömür boyu fclose($resource_handle) kullanılarak kısaltılabilir.

Sizin durumunuzda, betikiniz yürütülür gerçekleştirilmez, dosya artık bellekte olmayacaktır.

Komut tamamlamadan önce belleği temizlemek istediğiniz durumda, tek yapmanız gereken kaynak dosya tanıtıcısı .

Başka bir notta, kullandığınız /img geçersiz ve göz ardı ediliyor. Tek eklenen veri /maxmemory:n'dir.