Получение имени файла (или удаление файла) с помощью дескриптора файла
Есть ли возможность получить имя файла из дескриптора файла? Или как я могу удалить файл, имеющий только дескриптор?
4 answers
Существует 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("некоторый файл", "r"):
"test"
Нью-Йорк. Afaik в PHP нет функции для этого напрямую. Но в Linux вы можете сделать
$fp = fopen('somefile', 'r');
$stat = fstat($fp);
$inode = $stat['ino'];
system("find -inum $inode", $result);
echo $result;
Это непроверено, поэтому может потребоваться настройка.
РЕДАКТИРОВАТЬ По-видимому, существует более простое решение.
Для этого вам нужно будет создать оболочку, в которой хранится имя файла. Дескриптор файла не имеет контекста имени файла, из которого он был создан.
Чистый метод использования временного файла:
<?
$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.