使用文件句柄获取文件名(或删除文件)
是否有可能从文件句柄获取文件名? 或者我怎样才能删除文件只有一个句柄?
有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结束的时候被删除。