2012-04-06 1 views
1

Я сохранил более 250 Мбайт заархивированного файла в Mongodb, используя php. но я не могу вернуть его обратно. Он просто показывает мне номер «0». Ниже мой код.Загрузка большого файла из Mongodb с помощью PHP

$id = $_GET['id']; 
require 'dbconnection.php'; 


$mongo = DBConnection::instantiate(); 
$gridFS = $mongo->database->getGridFS(); 

$object = $gridFS->findOne(array('_id' => new MongoId($id))); 
header("Content-Transfer-Encoding: binary"); 
header('Content-type: '.$object->file['filetype']); 
header('Expires: 0'); 


header("Content-disposition: attachment; filename=".$object->file['filename']); 
//header('Content-name: '.$object->file['filename']); 
    header('Content-Type:application-x/force-download'); 
echo $object->getBytes(); 

Проверьте его. Это отлично подходит для файлов размером менее 100 МБ.

+1

Скорее всего, это связано с использованием всей доступной разрешенной памяти. –

ответ

2

Прочитайте документацию, http://php.net/manual/en/mongogridfsfile.getbytes.php

Внимание: это будет загружать файл в память. Если файл больше , чем ваша память, это вызовет проблемы!

Таким образом, вы должны были бы хранить большие файлы на куски и затем перебрать и эхо ломти, я обыскивал Google и нашел это (3. Показывает, как получить доступ к файлам на основе кусках):

http://blog.hardkap.com/index.php/posts/00069/MongoDB---GridFS

+0

Извините, я получил от вышеуказанной ссылки. Загруженный файл размером 254 МБ создал размер блока размером 26 МБ. При извлечении файла он получит кусок один за другим и загрузит его. Я не думаю, что он получит целую 254 МБ от кусков в память, а затем загрузит ее. –