Getting filename (or deleting file) using file handle

PhpFile

Php Problem Overview


Is there a possibility to obtain filename from file handle? Or how can I delete file having only a handle?

Php Solutions


Solution 1 - Php

There is stream_get_meta_data. It works for a stream that you get from [tmpfile()](https://www.php.net/manual/en/function.tmpfile.php "Link to understand tmpfile() method"). 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"

Solution 2 - Php

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.

Solution 3 - Php

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.

Solution 4 - Php

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionts.View Question on Stackoverflow
Solution 1 - Phplion.vollnhalsView Answer on Stackoverflow
Solution 2 - PhpGordonView Answer on Stackoverflow
Solution 3 - PhpGregView Answer on Stackoverflow
Solution 4 - PhpdiyismView Answer on Stackoverflow