1.18版本新增。
定义
参数
$alias: array- 非空string ,用于在使用
gridfs://流包装器访问文件时标识 GridFS 存储桶。
行为
为存储桶注册别名后,可以使用 gridfs://<bucket-alias>/<filename> 格式的文件名string来访问文件的最新修订版本。
支持的流函数:
具有 "r"、"rb"、"w" 和 "wb" 模式的 fopen()
在读取模式,流上下文可以包含选项gridfs['revision']来指定要读取的文件的修订号。 如果省略,则读取最新修订版(修订版-1 )。
在写入模式下,流上下文可以包含选项gridfs['chunkSizeBytes'] 。 如果省略,则从Bucket实例选项继承默认值。
函数rename和unlink将重命名或删除文件名的所有修订版本。 如果文件名不存在,这些函数会抛出FileNotFoundException 。
例子
使用 gridfs:// 流包装器读取和写入 GridFS 存储桶
以下示例演示了如何为 GridFS 存储桶注册别名,并使用函数file_exists() 、 file_get_contents()和file_put_contents()读取和写入存储桶。
每次调用这些函数都会向服务器发出请求。
$database = (new MongoDB\Client)->getDatabase('test');$bucket = $database->getGridFSBucket();
$bucket->registerGlobalStreamWrapperAlias('mybucket');
var_dump(file_exists('gridfs://mybucket/hello.txt'));
file_put_contents('gridfs://mybucket/hello.txt', 'Hello, GridFS!');
var_dump(file_exists('gridfs://mybucket/hello.txt'));
echo file_get_contents('gridfs://mybucket/hello.txt');
unlink('gridfs://mybucket/hello.txt');而输出将类似如下所示:
bool(false)bool(true)Hello, GridFS!读取文件的特定修订版本
使用流上下文,您可以指定要读取的文件的修订号。 如果省略,则读取最新修订版本。
$database = (new MongoDB\Client)->getDatabase('test');$bucket = $database->getGridFSBucket();
$bucket->registerGlobalStreamWrapperAlias('mybucket');
// Creating revision 0$handle = fopen('gridfs://mybucket/hello.txt', 'w');fwrite($handle, 'Hello, GridFS! (v0)');fclose($handle);
// Creating revision 1$handle = fopen('gridfs://mybucket/hello.txt', 'w');fwrite($handle, 'Hello, GridFS! (v1)');fclose($handle);
// Read revision 0$context = stream_context_create([ 'gridfs' => ['revision' => 0],]);$handle = fopen('gridfs://mybucket/hello.txt', 'r', false, $context);echo fread($handle, 1024);而输出将类似如下所示:
Hello, GridFS! (v0)