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