是否有可能从文件句柄中获取文件名?或者我如何删除只有句柄的文件?
答案 0 :(得分:124)
有stream_get_meta_data。它适用于从tmpfile()获得的流。如果您在常规文件指针上调用它,那么您可能只获得基本名称。
$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"
答案 1 :(得分:8)
Nyes。 Afaik在PHP中没有直接的功能。但是在Linux上,你可以做到
$fp = fopen('somefile', 'r');
$stat = fstat($fp);
$inode = $stat['ino'];
system("find -inum $inode", $result);
echo $result;
这是未经测试的,因此可能需要调整。
编辑显然, 是simpler solution。
答案 2 :(得分:3)
要实现此目的,您需要创建一个存储文件名的包装器。文件句柄没有创建文件名的上下文。
答案 3 :(得分:-4)
使用临时文件的干净方法:
<?
$tmp=array_search('uri', @array_flip(stream_get_meta_data($GLOBALS[mt_rand()]=tmpfile())));
file_put_contents($tmp, 'hello');
echo file_get_contents($tmp);
?>
不需要关闭tmp文件,它将在php结束时被删除。