在 MongoDB 中存储大于 16 MB 的字符串(MongoDB 文档大小限制为 16 MB)

2023-12-24

Goal:

I want to store large encrypted strings into MongoDB. As I've learned from the PHP driver documentation it's only possible to store data larger than 16 MB when I'm using GridFS. The MongoDB PHP library doesn't offer a method to store "strings" in the grid. It just offers methods to store files (with a file path). Correct me if I'm wrong. If there is any method/function from the class to store a string larger than 16 MB into the database, please tell me.

编辑/答案:

将大于 16 MB 的字符串存储到 MongoDB 数据库

好吧,我终于弄清楚了,我很高兴它能工作!有一种方法可以保存strings with GridFS在数据库中。该文档不是很容易理解,我必须阅读每个的描述GridFS function多次了解每个内容function做了什么以及我可以通过它们每个人实现什么。

第一步:创建 MongoDB 驱动程序的 Client 类的实例

function __construct(){
        $client = new MongoDB\Client('mongodb://127.0.0.1/');
        $this->collection = $client->myExampleDatabase->myExampleCollection;
        $this->grid = $client->myExampleDatabase->selectGridFSBucket();
}

You do not必须使用__construct function!

因此,要存储大字符串,您必须执行以下操作:

function insertDocument($id, $telegramuser, $message, $hash, $file) {
        try {   
                $stream = fopen("php://temp", "w+b");
                fwrite($stream, $file);
                rewind($stream);
                $fileid = $this->grid->uploadFromStream("cryptedObject", $stream, array("metadata" => array()));
                $document = array(
                    "id" => $id,
                    "telegram" => $telegramuser,
                    "fileid" => $fileid,
                    "encrypted" => $message,
                    "hash" => $hash,
                    "timestamp" => time(),
                );
                $this->collection->insertOne($document);
        } catch(Exception $e) {
                echo "Error" . $e;
        }
}

我建议通过$fileid来自你的变量GridFSFile反对document,如上面的函数所示。存放的重要部件strings这些是:

$stream = fopen("php://temp", "w+b");
fwrite($stream, $file);
rewind($stream);
$fileid = $this->grid->uploadFromStream("cryptedObject", $stream, array("metadata" => array()));

$fileid包含自动地分配的id你的GridFSFile object你可以用它传递到另一个document作为你的参考GridFSFile object.

当您使用此函数时,您可以从数据库中检索字符串,并且可以将其回显或打印到屏幕上:

function getFile($id) {
        $document = $this->findDocument("id", $id);
        $fileid = $document->fileid;
        $stream = $this->grid->openDownloadStream($fileid);
        return stream_get_contents($stream);
}

首先,我从数据库中检索文档以获取fileid这是一个reference id to my GridFSFile object。然后我用openDownloadStream($fileid)创建一个resource in the variable $streamstream_get_contents($stream)我得到的内容resource $stream我可以用它来回显或打印屏幕上的内容,或者以我想要的任何方式使用它。

这就是整个魔法。

目前我无法推荐以下文档MongoDB,但要获得完整的答案,您可以找到GridFSPHP 文档here https://docs.mongodb.com/php-library/current/reference/class/MongoDBGridFSBucket/.


GridFS 支持任意数据 blob。数据库不关心(或不知道)存储的内容是否来自文件、网络流或其他来源,或者是简单的文本字符串。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 MongoDB 中存储大于 16 MB 的字符串(MongoDB 文档大小限制为 16 MB) 的相关文章

  • MongoDB 给出奇怪的连接错误

    我在使用 PHP 连接 MongoDB 时遇到问题 这是我的代码 这会产生以下错误 Fatal error Uncaught exception MongoConnectionException with message localhost
  • PHP 字节数组转 Base64(来自 Mssql 的字节数组)

    我在表上使用 Mssql 和图像 例如 0xFFD8FFE000104A46494 我觉得是这样的字节数组 我想用 PHP 将其更改为图像 我试试这个 img src 但图像不显示 代码演示 http sandbox onlinephpfu
  • Composer 自动加载始终是第一位的

    我在一个遗留项目中使用作曲家 该项目有很多没有命名空间的类 重构不是一个选项 这是一个非常庞大的应用程序 但所有新模块都完全符合 psr 4 遗留代码有它自己的自动加载方法 使用类映射 非常有效 我的问题是 无论我以什么顺序添加自动加载器方
  • PHP,检查 URL 和文件是否存在?

    我为 WordPress 创建了一个插件 需要存在两个文件才能正常运行 第一个文件定义为文件系统路径 第二个文件定义为 URL 假设第一个文件是 home my site public html some folder required f
  • 如何 $filter where 条件与数组匹配?

    在 lookup 之后 我将得到一个名为 lastViewed 的连接 如下所示 id 5955ea4fd8099718330ab191 lastViewed id ObjectId 595218a7d346d27fb0bc1705 use
  • 电子邮件标题中的特殊字符是什么以及何时使用引号?

    我正在尝试使用 PHP 发送和阅读电子邮件 到目前为止 我发现我必须使用该函数对特殊字符进行编码mb encode mimeheader 但我不必对空格进行编码 我还发现地址字段中的括号不起作用 读取带有括号的标题时 PHP 的 imap
  • orm和pdo的区别

    我对 ORM 和 PDO 之间的区别有点困惑 PDO是一种ORM吗 根据我的理解 ORM 基本上是一种数据映射 PDO 还提供了数据库数据的抽象 PDO 和 ORM 是两个完全不同的东西 PDO 是数据库访问抽象层的具体实现 它使您能够使用
  • 将 PHP 错误存储在日志文件中

    我想将 php 生成的任何错误和警告存储在日志文件中 但是still也以正常方式显示它们 回显 Thanks 您可以定义自己的函数并描述如何处理错误 http www php net manual en function set error
  • Laravel - 如何使用供应商类?

    我想在 m paths php 文件上使用移动检测 我已将该包添加为composer json 中的必需项 并将其安装在供应商文件中 我现在该如何使用它 我尝试了这个答案 但没有成功 因为找不到该课程 Laravel 4 使用供应商类 ht
  • 需要 php pdo 内爆数组并在 mysql 中插入多行

    基于this https stackoverflow com questions 4629022 how to insert an array into a single mysql prepared statement w php and
  • PHP file_get_contents() 和设置请求标头

    使用 PHP 是否可以发送 HTTP 标头file get contents 我知道您可以从您的php ini文件 但是 您是否还可以发送其他信息 例如HTTP ACCEPT HTTP ACCEPT LANGUAGE and HTTP CO
  • 两个 mysql_fetch_array 语句

    是否有任何原因导致我无法在一个 while 循环中包含两个处理两个不同 mysql 查询结果的 mysql fetch array 语句 原因是我有两个来自 mysql 数据库的查询结果 每个结果包含两列 如下所示 Query 1 Date
  • PHP 性能有多好? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这是我最近看到的一篇文章的后续内容 该文章表明 PHP 性能很差 PHP 始终是瓶颈 我的服务器群 让我向您展示 PHP 整体性能 http t
  • 来自外部文件的 PHP 变量?

    编辑 完成的解决方案 工作代码 所以 这是我的一个朋友帮我想出来的 这是我在 K2 items php 文件中使用的部分 div class fb comments div
  • Codeigniter:用户会话不断过期

    我正在使用 CodeIgniter 但在会话方面遇到了一个小问题 我已将 config php 中的 sess expiration 设置为 0 以便用户会话永远不会过期 但用户 甚至我自己 仍然偶尔会被踢出并要求再次登录 顺便说一句 我将
  • 删除删除线的 unicode 文本?

    我偶尔会收到用户的输入 他们正在使用那些烦人的 stikethrough 文本生成器 这破坏了我的代码 我尝试过在这里找到的一些代码 string preg replace x00 x1F x80 xFF string 它有效 但我需要它只
  • ajax - 检查用户名是否存在+如果存在则返回消息

    我试图检查用户想要的用户名是否已被使用 而无需发送表单 基本上是用户名字段的模糊 我遇到了一些麻烦 有几个问题 我有我的输入字段加上js
  • 为什么 foreach 这么慢?

    PHPBench com http www phpbench com 在每个页面加载上运行快速基准测试脚本 在 foreach 测试中 当我加载它时 foreach 的运行时间是第三个示例的 4 到 10 倍 为什么本机语言构造明显比执行逻
  • 将 IP 地址与 IPv6 块进行比较

    我使用 PHP 将用户 IP 地址与 IP 块列表进行比较 其中大多数是 IPv4 但其中一些是 IPv6 我从用户那里获得的 IP 地址始终与 IPv4 兼容 至少我是这么假设的 我将如何比较这个 这就是我现在正在使用的 function
  • 寻求有关标记视频系统上的“相关视频”查询的建议

    好吧 我运行一个小型视频网站 在实际的视频页面上有一条与大多数视频页面 例如 YouTube 类似的 相关视频 目前我所做的就是随机获取其标签之一并查找其他视频相同的标签 毫不奇怪 这不是一个好方法 因为有些标签非常模糊 有些视频被错误标记

随机推荐