2012-01-17 52 views
10

在PHP中,我使用內存(或者說是臨時內存)文件將外部URL中的圖像加載到GD資源中:如何從php中刪除文件:// temp wrapper

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

但據我瞭解,這個文件仍然在內存中,即使我在imagecreatefromjpeg()後沒有使用它。

有沒有一種方法可以釋放由php:// temp wrapper文件使用的內存?

或至少表示該文件不再使用?

+1

不知道這是可能的 - 我希望它是,如果不是這樣,似乎很荒謬。但是,一個潛在的解決方法是使用'php:// maxmemory'來設置非常低的內存值,這樣數據總是會被寫入磁盤,從而保持內存使用率低。雖然如果你打算這樣做,你可能只需要使用一個臨時文件,渲染整個'php:// temp'就沒有意義了。 – DaveRandom 2012-01-17 11:58:36

回答

5

當您在php:// temp(或php://對於該事件而言)創建文件時,資源只會持續腳本的生命週期。如果使用fopen()打開文件以獲取資源句柄,則可以使用fclose($resource_handle)縮短使用期限。

就你而言,只要你的腳本完成執行,文件將不再在內存中。

在腳本完成之前您想要清除內存的情況下,您所要做的只是fclose()資源文件指針。

另一方面,您正在使用的/img無效,正在被忽略。唯一添加的數據被識別爲/maxmemory:n