Ограничение памяти, избегающее В файле MongoGridFSFile::getBytes PHP


Предположим, что на моем сервере 4 ГБ оперативной памяти, и я загрузил файл размером 5 ГБ. Как я могу загрузить этот файл с помощью 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();
?>
Author: Abhishek Sharma, 2013-04-25

2 answers

Начиная с версии 1.3.0 драйвера PHP, вы можете получить доступ к файлам GridFS в виде потока PHP, используя $mongogridfsfile->getResource().

Используя этот метод, вы можете итеративно считывать данные и распечатывать их, избегая ограничения памяти на вашем сервере.

 3
Author: bjori, 2013-05-05 01:05:18
  • просто разделите исходный файл на фрагменты и сохраните метаданные о каждом из этих фрагментов в mongodb, каждый из вашего фрагмента будет обычным файлом в gridfs
  • после этого у вас будет мета-слой с метаданными об исходном файле
  • также вы должны решить проблемы с обратным загрузкой файла из gridfs и составным исходным файлом из фрагментов
  • размер этого фрагмента вы можете выбрать в зависимости от скорости вашей сети и ограничения ширины, эти фрагменты и фрагменты в gridfs отличается
 1
Author: Vladimir Muzhilov, 2013-04-25 20:12:11