2012-04-06 16 views
1

私はPHPを使ってMongodbに250MB以上のzipファイルを保存しました。私はそれを取り戻すことができません。それはちょうど私に "0"番号を示しています。以下は私のコードです。PHPを使ってMongodbから大きなファイルをダウンロード

$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(); 

を確認してください。これは、100MB未満のファイルに対しては正常に動作します。

+1

利用可能なすべてのメモリを使い切ることに最も関連しています。 –

答えて

2

ドキュメントを読んで、http://php.net/manual/en/mongogridfsfile.getbytes.php

警告:これはメモリにファイルをロードします。ファイルがメモリより大きい である場合、これは問題を引き起こします。

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

だからあなたはチャンクで大きなファイルを格納して、ループやチャンクをエコーする必要があるだろう、私は(3.チャンクに基づいてファイルにアクセスする方法を示し)グーグルを精練し、これを見つけました

+0

申し訳ありませんが、私は上記のリンクから得ました。アップロードされた254 MBのファイルは、26 MBのチャンクサイズを作成しました。ファイルを取得している間、チャンクが1つずつ取得され、ダウンロードされます。私はそれがチャンクからメモリに254MB全体を取得し、それをダウンロードするとは思わない。 –

関連する問題