2016-12-07 7 views
1

Laravel 4.2でPHPExcelでレポートを生成する際に問題が発生しました。データベースから取得した行数が非常に多く(50万行以上)、作成された配列はPHPのメモリと最終的なファイルの生成でメモリオーバーフローを引き起こします。私はPHPExcelキャッシュシステムを使用しようとしましたが、システムメモリも大量に使用しています。私が使用している他の解決策はありますか?一度に5千ラインなど、レコードの作成を部分的に処理することを考えましたが、その努力が自分の問題を解決するかどうかはわかりません。LaravelでPHPExcelでレポートを生成するソリューション4.2

私はPHPExcelキャッシュ(discISAM)を使用するために使用するコード:

public function __construct() { 
     $templateFileName = $this->getTemplateFileName(); 
     $fullPathTemplate = public_path().'/Temp/'.$templateFileName.'.xlsx'; 

     // $cacheMethod = \PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp; 
     $cacheMethod = \PHPExcel_CachedObjectStorageFactory::cache_to_discISAM; 

     $cacheSettings = array(
      // 'memoryCacheSize' => '150MB' 
      'dir' => 'public/Temp/cache' 
     ); 
     $cacheAtivo = \PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings); 
     if (! $cacheAtivo) { 
      die($cacheMethod . " Cache invalido " . EOL); 
     } 

     $objPhpReader = new \PHPExcel_Reader_Excel2007(); 
     $this->phpExcelObject = $objPhpReader->load($fullPathTemplate); 
} 

はみんなの注目のために事前にありがとうございます。

答えて

0

Chunk Methodをチェックすると、ファイルへのチャンク書き込みごとにローを制限できます。あなたが雄弁レコードの多く(単位:千)を処理する必要がある場合はチャンクがあなたのRAMのすべてを食べずにあなたができるようになりますチャンクコマンドを使用して、この目的のために

チャンキング結果

を作った。

User::chunk(200, function($users) 
{ 
    foreach ($users as $user) 
    { 
     // 
    } 
}); 

メソッドに渡される最初の引数は、 "チャンク"ごとに受け取るレコードの数です。 2番目の引数として渡されたClosureは、データベースから取得された各チャンクに対して呼び出されます。

関連する問題