¿Existe la posibilidad de obtener el nombre del archivo desde el identificador del archivo? ¿O cómo puedo eliminar el archivo que tiene solo un identificador?Obtención de nombre de archivo (o eliminación de archivo) utilizando el identificador de archivo
Respuesta
Hay stream_get_meta_data. Funciona para una transmisión que obtienes de tmpfile(). Si lo llama en un puntero de archivo normal, entonces 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 ("somefile", "r"):
"test"
¡Esto funciona! No sé cómo esto no surgió como la respuesta aceptada, y todos aquí dicen que esto es imposible. También funciona en Windows. – rsk82
Gracias por esto, parece una cosa tan simple, pero resulta ser un dolor de cabeza ... También puedes/debes usar 'realpath' para obtener el archivo completo. –
Para lograr esto, deberá crear un contenedor que almacene el nombre del archivo. Un identificador de archivo no tiene contexto del nombre del archivo desde el que se creó.
Nyes. Afaik no hay ninguna función en PHP para eso directamente. Pero en Linux, se puede 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 Al parecer, no es un simpler solution.
Esta es la única forma en que puedo pensar en hacerlo, excepto para realizar el 'find' dentro de PHP, aunque probablemente sería más lento. – Orbling
un método limpio de usar 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, lo hará borrarse mientras termina php.
¿En serio lo llamas un "método limpio"? – xZero
- 1. Obtención de una ruta de archivo desde un identificador de archivo en Windows
- 2. fileName o nombre de archivo?
- 3. Obtención de un ARCHIVO * desde un archivo estándar
- 4. Eliminación o cambio de nombre de un archivo con un controlador abierto
- 5. Archivo de bloqueo y eliminación
- 6. filas eliminación de un archivo de Excel utilizando C#
- 7. ¿Puedo encontrar un nombre de archivo de un identificador de archivo en Perl?
- 8. Guardar archivo con el nuevo nombre de archivo: anexar al nombre de archivo existente
- 9. Obtención del último archivo abierto en el cuadro de diálogo de archivo abierto
- 10. archivo existe por el patrón de nombre de archivo
- 11. Abrir archivo por nombre de archivo comodín
- 12. Eliminación de información de un archivo HDF5
- 13. marca de hora en el nombre del archivo utilizando PowerShell
- 14. Eliminación de archivo de Java 6
- 15. Identificador de archivo único en Windows
- 16. WaitForSingleObject en un identificador de archivo?
- 17. Eliminación de un archivo de servidor
- 18. Obtener el nombre de archivo de FileOutputStream
- 19. Utilizando el archivo .RData
- 20. Obtener el nombre de archivo de la URL utilizando expresiones regulares o Javascript
- 21. Guardar archivo Javascript con el nombre de archivo
- 22. Windows Batch Copie el archivo por nombre de archivo
- 23. Extraer solo el nombre de archivo Del nombre de FileItem
- 24. Buscar nombre de archivo de la ruta de archivo completo
- 25. ¿Cómo quitar una copia de un identificador de archivo STDIN?
- 26. ¿Obtener el nombre de archivo de QFile?
- 27. Registro de Python (nombre de la función, nombre de archivo, número de línea) utilizando un único archivo
- 28. nombre de archivo de sesión
- 29. Nombre de clase y nombre de archivo
- 30. Eliminación de un archivo en VBA
No creo que sea posible. Sin embargo, me encantaría tener una solución. – BoltClock
Lo dudo, también. –
Me encantaría tener al menos la posibilidad de convertir el recurso en el nombre del archivo. –