开发者

Getting filename (or deleting file) using file handle

开发者 https://www.devze.com 2023-02-13 18:15 出处:网络
Is there a possibility to 开发者_运维百科obtain filename from file handle? Or how can I delete file having only a handle?There is stream_get_meta_data. It works for a stream that you get from tmpfile(

Is there a possibility to 开发者_运维百科obtain filename from file handle? Or how can I delete file having only a handle?


There is stream_get_meta_data. It works for a stream that you get from tmpfile(). If you call it on a regular file pointer then you might only get the basename.

$meta_data = stream_get_meta_data($stream_or_file_pointer);
$filename = $meta_data["uri"];
echo $filename;

Example for tmpfile():

"/private/var/folders/v3/n54x13jx5v7610fw9dm0wcxm0000gn/T/phpCJvevP"

Example for fopen("somefile", "r"):

"test"


Nyes. Afaik there is no function in PHP to that directly. But on Linux, you can do

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

This is untested so it might need tweaking.

EDIT Apparently, there is a simpler solution.


To achieve this, you will need to create a wrapper that stores the file name. A file handle has no context of the filename it was created from.


A clean method to use temporary file:

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

without need to fclose the tmp file, it will be deleted while the php ends.

0

精彩评论

暂无评论...
验证码 换一张
取 消