ts.
¿Existe la posibilidad de obtener el nombre de archivo del identificador de archivo? ¿O cómo puedo eliminar un archivo que solo tiene un identificador?
león.vollnhals
Hay stream_get_meta_data. Funciona para una transmisión que obtienes de tmpfile(). Si lo llama en un puntero de archivo normal, es posible que solo obtenga el nombre base.
$meta_data = stream_get_meta_data($stream_or_file_pointer);
$filename = $meta_data["uri"];
echo $filename;
Ejemplo para tmpfile():
"/private/var/folders/v3/n54x13jx5v7610fw9dm0wcxm0000gn/T/phpCJvevP"
Ejemplo para fopen(“algúnarchivo”, “r”):
"test"
-
¡Esto funciona! No sé cómo esto no surgió como la respuesta aceptada, y todos aquí dicen que esto es imposible. Funciona en Windows también.
– rsk82
6 de noviembre de 2011 a las 21:51
-
Gracias por esto, parece una cosa tan simple, pero resulta ser un dolor de cabeza… También puedes/debes usar
realpath
para obtener la ruta de archivo completa.–Wayne Weibel
4 de diciembre de 2013 a las 20:08
gordon
Sí. Afaik no hay ninguna función en PHP para eso directamente. Pero en Linux, puedes hacer
$fp = fopen('somefile', 'r');
$stat = fstat($fp);
$inode = $stat['ino'];
system("find -inum $inode", $result);
echo $result;
Esto no se ha probado, por lo que podría necesitar ajustes.
EDITAR Aparentemente, hay es una solución más sencilla.
-
Esta es la única forma en que puedo pensar en hacerlo, excepto para realizar el
find
dentro de PHP, aunque eso probablemente sería más lento.– Orbling
28 de febrero de 2011 a las 16:41
Para lograr esto, deberá crear un contenedor que almacene el nombre del archivo. Un identificador de archivo no tiene contexto del nombre de archivo a partir del cual se creó.
-
Para ver un ejemplo de este enfoque, consulte esta respuesta SO.
– obispo
22 de junio de 2015 a las 17:24
diyismo
Un método limpio para usar un archivo temporal:
<?
$tmp=array_search('uri', @array_flip(stream_get_meta_data($GLOBALS[mt_rand()]=tmpfile())));
file_put_contents($tmp, 'hello');
echo file_get_contents($tmp);
?>
sin necesidad de cerrar el archivo tmp, se eliminará mientras finaliza el php.
No creo que sea posible. Aunque me encantaría tener una solución.
– BoltClock
28 de febrero de 2011 a las 16:25
Me encantaría tener al menos la posibilidad de enviar recursos al nombre del archivo.
– ts.
28 de febrero de 2011 a las 16:29
@ts: Con el movimiento de una varita mágica, ¡puf!
– BoltClock
28 de febrero de 2011 a las 16:30
@Alfabravo: No todas las funciones de PHP crean identificadores usando nombres de archivo.
– BoltClock
28 de febrero de 2011 a las 16:30
si usa tmpfile(), devuelve un identificador de archivo, ¡pero no tiene idea de cuál es el nombre del archivo!
– HenchHacker
24 de noviembre de 2012 a las 14:02