Getting filename (or deleting file) using file handle

后端 未结 4 1781
感情败类
感情败类 2020-12-08 01:46

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

相关标签:
4条回答
  • 2020-12-08 02:08

    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"
    
    0 讨论(0)
  • 2020-12-08 02:08

    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.

    0 讨论(0)
  • 2020-12-08 02:08

    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 讨论(0)
  • 2020-12-08 02:18

    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.

    0 讨论(0)
提交回复
热议问题