避免内存限制在MongoGridFSFile :: getBytes PHP中

时间:2013-04-25 19:42:13

标签: php mongodb gridfs

假设我的服务器有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();
?>

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

  • 只是按块分割源文件并在mongodb中保存每个块的元信息,你的块中的每一个都将是gridfs中的普通文件
  • 之后,您有一个元图层,其中包含有关源文件的元数据
  • 你也必须解决从gridfs反向下载文件和从chunks
  • 复合源文件的问题
  • 您可以根据网络速度和宽度限制选择此块的大小,gridfs中的这个块和块是不同的