Есть ли возможность получить имя файла из дескриптора файла? Или как я могу удалить файл, имеющий только дескриптор?
Существует 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.