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

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

Ответ 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.