Получение имени файла (или удаление файла) с помощью дескриптора файла

Есть ли возможность получить имя файла из дескриптора файла? Или как я могу удалить файл, имеющий только дескриптор?

Существует stream_get_meta_data . Он работает для потока, который вы получаете из tmpfile (). Если вы назовете его обычным указателем на файл, вы можете получить только базовое имя.

$meta_data = stream_get_meta_data($stream_or_file_pointer); $filename = $meta_data["uri"]; echo $filename; 

Пример для tmpfile ():

 "/private/var/folders/v3/n54x13jx5v7610fw9dm0wcxm0000gn/T/phpCJvevP" 

Пример для fopen ("somefile", "r"):

 "test" 

Nyes. Afaik нет прямой функции PHP для этого. Но в Linux вы можете сделать

 $fp = fopen('somefile', 'r'); $stat = fstat($fp); $inode = $stat['ino']; system("find -inum $inode", $result); echo $result; 

Это непроверено, поэтому может потребоваться настройка.

EDIT По-видимому, есть более простое решение .

Для этого вам нужно создать обертку, в которой хранится имя файла. У дескриптора файла нет контекста имени файла, из которого он был создан.

Чистый способ использования временного файла:

 <? $tmp=array_search('uri', @array_flip(stream_get_meta_data($GLOBALS[mt_rand()]=tmpfile()))); file_put_contents($tmp, 'hello'); echo file_get_contents($tmp); ?> 

без необходимости форматирования файла tmp, он будет удален во время завершения php.