MongoDB\GridFS\Bucket::registerGlobalStreamWrapperAlias()
新功能在版本1.18.
定义
参数
$alias
: 数组- 一个非空字符串,用于在使用
gridfs://
流包装器访问文件时识别 GridFS 存储桶。
行为
注册存储桶别名后,可以使用以下格式的文件名字符串访问文件的最新版本:gridfs://<bucket-alias>/<filename>
。
支持的流函数
fopen(),使用 "r"、"rb"、"w" 和 "wb" 模式
在读取模式下,流上下文可以包含选项 gridfs['revision']
以指定要读取的文件的版本号。如果省略,则读取最新版本(版本 -1
)。
在写入模式下,流上下文可以包含选项 gridfs['chunkSizeBytes']
。如果省略,则默认值继承自 Bucket
实例选项。
函数 rename
和 unlink
将重命名或删除文件名的所有版本。如果文件名不存在,则这些函数会抛出 FileNotFoundException
。
示例
使用gridfs://
流包装器读写GridFS存储桶
以下示例演示了如何为GridFS存储桶注册别名,并使用函数file_exists()
、file_get_contents()
和file_put_contents()
来读取和写入存储桶。
对这些函数的每次调用都会向服务器发送请求。
$database = (new MongoDB\Client)->selectDatabase('test'); $bucket = $database->selectGridFSBucket(); $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)->selectDatabase('test'); $bucket = $database->selectGridFSBucket(); $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)