2012-06-26 11 views
51

algo rápido ...Recuperar camino de tmpfile()

¿Hay una manera de recuperar la ruta de un archivo creado por tmpfile()?

¿O tengo que hacerlo yo mismo con tempnam()?

Respuesta

87

Parece stream_get_meta_data() funciona también:

$tmpHandle = tmpfile(); 
$metaDatas = stream_get_meta_data($tmpHandle); 
$tmpFilename = $metaDatas['uri']; 
fclose($tmpHandle); 
+17

+1 Por responder realmente la pregunta. A partir de PHP 5.3, simplemente puede usar 'stream_get_meta_data ($ tmpHandle) ['uri']'. – flu

+0

$ foo() ['bar'] no funciona en mi PHP 5.3.13, pero de lo contrario esta respuesta es la respuesta correcta a la pregunta anterior. – DarkSide

+0

¡Genial! sys_get_temp_dir() no disponible en el viejo servidor php 5.1 :( – Pete

0

sys_get_temp_dir()

¿Se volverá el directorio actual de la configuración para almacenar archivos temporales.

En cuanto al nombre de archivo generado, usaría tempnam() para usar una ruta de archivo, completa con el nombre, definido por usted/entrada del usuario.

http://www.php.net/manual/en/function.sys-get-temp-dir.php

+1

Cheers, sólo quería un doble control. – Zac

+3

Tenga en cuenta que 'tempnam()' no eliminará automáticamente el archivo una vez que finalice el script, tendrá que hacerlo usted mismo. – sp00n

+0

"El archivo se elimina automáticamente cuando se cierra (por ejemplo, al llamar a fclose(), o cuando no hay referencias restantes al manejador de archivo devuelto por tmpfile()), o cuando termina el script". http://php.net/manual/en/function.tmpfile.php – Andrew

0

gusta esta

$path = array_search('uri', @array_flip(stream_get_meta_data($GLOBALS[mt_rand()]=tmpfile()))); 
file_put_contents($path, 'hello');