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


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

 62
Author: BoltClock, 2011-02-28

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"
 116
Author: lion.vollnhals, 2011-10-07 17:27:14

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

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

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

РЕДАКТИРОВАТЬ По-видимому, существует более простое решение.

 8
Author: Gordon, 2017-05-23 12:10:16

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

 3
Author: Greg, 2011-02-28 16:29:12

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

<?
$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.

 -4
Author: diyism, 2011-11-23 03:14:28