如果我在php streamwrapper中有一个文件,例如"media://icon.png"
我怎么能让它告诉我该文件的文件系统路径,假设它在文件系统上?
我查看documentation page,但没有看到返回streamwrapper路径的方法。
答案 0 :(得分:1)
StreamWrapper类表示通用流。因为并非所有流都受文件系统概念的支持,所以没有通用的方法。
If the uri
property from stream_get_meta_data
isn't working for your implementation,您可以在营业时间记录信息,然后通过stream_get_meta_data
访问。例如:
class MediaStream {
public $localpath = null;
public function stream_open($path, $mode, $options, &$opened_path)
{
$this->localpath = realpath(preg_replace('+^media://+', '/', $path));
return fopen($this->localpath, $mode, $options);
}
}
stream_wrapper_register('media', 'MediaStream');
$fp = fopen('media://tmp/icon.png', 'r');
$data = stream_get_meta_data($fp);
var_dump(
$data['wrapper_data']->localpath
);
当然,总有一种蛮力方法:创建资源后,您可以调用fstat
,其中包括设备和inode。然后,您可以打开该设备,遍历其目录结构,并找到该inode。 See here for an example.