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


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

4 62

4 ответа:

здесь 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"

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

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

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

EDIT видимо, есть и a простое решение.

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

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

<?
$tmp=array_search('uri', @array_flip(stream_get_meta_data($GLOBALS[mt_rand()]=tmpfile())));
file_put_contents($tmp, 'hello');
echo file_get_contents($tmp);
?>

без необходимости fclose файл tmp, он будет удален в то время как php заканчивается.