使用文件句柄获取文件名(或删除文件)

是否有可能从文件句柄获取文件名? 或者我怎样才能删除文件只有一个句柄?

有stream_get_meta_data 。 它适用于从tmpfile()获得的stream。 如果你使用常规的文件指针调用它,那么你只能得到基本名称。

$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中没有直接的function。 在Linux上,你可以做

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

这是未经testing的,所以它可能需要调整。

编辑显然,有一个更简单的解决scheme 。

为了达到这个目的,你需要创build一个存储文件名的包装器。 文件句柄没有创build文件名的上下文。

一个干净的方法来使用临时文件:

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

不需要closurestmp文件,它会在php结束的时候被删除。