2012-01-17 17 views
10

En PHP, estoy usando un archivo en memoria (o mejor dicho, temp en la memoria) para cargar una imagen de una URL externa en un recurso GD:Cómo eliminar un archivo de php: // Contenedor temporal

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

Sin embargo, según tengo entendido, este archivo permanece en la memoria, aunque no lo utilizo después de imagecreatefromjpeg().

¿Hay alguna manera de liberar memoria utilizada por un archivo envoltorio de php: //?

¿O al menos señal de que el archivo ya no se utiliza?

+1

No estoy seguro de que esto sea posible, espero que lo sea, parece bastante ridículo si no es así. Sin embargo, un posible trabajo sería utilizar 'php: // maxmemory' para establecer un valor de memoria muy bajo para que los datos siempre se escriban en el disco, manteniendo el uso de memoria bajo. Aunque si va a hacer eso, también podría usar un archivo temporal, haciendo que toda la cosa 'php: // temp' no tenga sentido. – DaveRandom

Respuesta

5

Cuando crea un archivo en php: // temp (o php: // memoria para el caso), el recurso solo dura la vida del script. Si abre el archivo usando fopen() para obtener un manejador de recursos, la vida útil puede acortarse usando fclose($resource_handle).

En su caso, tan pronto como su script termine de ejecutarse, el archivo ya no estará en la memoria.

En el caso en que desee borrar la memoria antes de la finalización del script, todo lo que tiene que hacer es fclose() puntero al archivo de recursos.

En otra nota, el /img que está utilizando no es válido y está siendo ignorado. La única información añadida que se reconoce es /maxmemory:n.

Cuestiones relacionadas