【问题标题】:Memory limit avoiding In MongoGridFSFile::getBytes PHP在 MongoGridFSFile::getBytes PHP 中避免内存限制
【发布时间】:2013-04-19 20:34:26
【问题描述】:

假设我的服务器有 4GB 的内存,我上传了一个大小为 5GB 的文件。如何使用 gridfs 下载该文件。以下网站指出http://www.php.net/manual/en/mongogridfsfile.getbytes.php 如果您的文件比内存大,那么它就是一个问题,但没有给出解决方案。

任何人都可以为此提供任何解决方案。 我使用这个演示代码来访问一个文件。

<?php
// Connect to Mongo and set DB and Collection
$mongo = new Mongo();
$db = $mongo->myfiles;

// GridFS
$gridFS = $db->getGridFS();

// Find image to stream
$file = $gridFS->findOne("win.tar");

// Stream image to browser
header("Content-Description: File Transfer");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"win.tar\"");
echo $file->getBytes();
?>

【问题讨论】:

    标签: php mongodb gridfs


    【解决方案1】:
    • 只需将源文件按块拆分,并将每个块的元信息保存在 mongodb 中,您的块中的每个块都将是 gridfs 中的普通文件
    • 之后,您将拥有一个包含源文件元数据的元层
    • 您还必须解决从 gridfs 反向下载文件和从块中反向下载复合源文件的问题
    • 这个块的大小你可以根据你的网络速度和宽度限制来选择,这个块和gridfs中的块是不同的

    【讨论】:

      【解决方案2】:

      从 PHP 驱动程序 1.3.0 版开始,您可以使用 $MongoGridFSFile->getResource() 以 PHP 流的形式访问 GridFS 文件。

      使用该方法,您可以反复读取数据并将其打印出来,避免服务器上的内存限制。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-09
        • 2021-09-24
        • 1970-01-01
        • 2010-12-15
        • 1970-01-01
        • 2013-11-03
        • 2019-07-16
        • 1970-01-01
        相关资源
        最近更新 更多