MongoDB\GridFS\Bucket::registerGlobalStreamWrapperAlias()
1.18版本新增。
定义
参数
$alias
: array- 非空string ,用于在使用
gridfs://
流包装器访问文件时标识 GridFS 存储桶。
行为
为存储桶注册别名后,可以使用 gridfs://<bucket-alias>/<filename>
格式的文件名string来访问文件的最新修订版本。
支持的流函数:
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)