Всем привычна схема, при которой известно имя файла, и вы совершаете с ним какие то манипуляции. В PHP много функций, которые предоставляют именно такой функционал.
Что делать, когда есть только file handle? Как получить имя открытого файла?
В базовом расширении для работы с файловой системой ничего подходящего не нашлось. Мне уже показалось, что следствие зашло в тупик.
Решение было найдено в другом базовом расширении, работающем с потоками. Потоковые функции в качестве аргумента могут принимать file handle.
Для решения нашей проблемы будет полезна функция stream_get_meta_data.
1 2 3 4 5 6 7 8 9 10 |
<?php //создадим какой то временный файл $temp = tmpfile(); //запишем туда какие то данные fwrite($temp, 'temporary file!'); //получим мета $metas = stream_get_meta_data($temp); print_r($metas); //закроем работу с файлом fclose($temp); |
Данный пример выведет что то вроде следующего:
1 2 3 4 5 6 7 8 9 10 11 |
Array ( [wrapper_type] => plainfile [stream_type] => STDIO [mode] => r+b [unread_bytes] => 0 [seekable] => 1 [uri] => D:\OpenServer\userdata\temp\php6A7E.tmp [timed_out] => [blocked] => 1 [eof] => ) |
Среди прочих мета-данных мы видим имя временного файла:
1 |
[uri] => D:\OpenServer\userdata\temp\php6A7E.tmp |