Получение имени файла (или удаление файла) с помощью дескриптора файла - PullRequest
64 голосов
/ 28 февраля 2011

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

Ответы [ 4 ]

125 голосов
/ 07 октября 2011

Существует 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"
8 голосов
/ 28 февраля 2011

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

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

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

РЕДАКТИРОВАТЬ Очевидно, что является более простым решением .

3 голосов
/ 28 февраля 2011

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

0 голосов
/ 23 ноября 2011

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

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

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