PHPExcelフレームワークを使用して、非常に大きなExcelドキュメントをmysqlクエリから書き出しようとしています。PHPExcel - チャンクで書き込み/追加する
すべては、ページがエラーでフラグが付けられます(の程度がや)私は5000行のマークを打つまでは正常に動作します:
Fatal error: Allowed memory size of xxx bytes exhausted (tried to allocate yyy bytes) in zzz on line aaa
私はこれが文書化されている知っている、と私は上のメモリ割り当てを調整しています私はまだ天井に当たっています。私も書式をオフにしようとしましたが、現実にはそれが必要になります。
私はメモリ割り当てを使い果たしていないので、小さなチャンクで書き込むか、Excelドキュメントに追加する方法がありますか?私はページの行に沿って考えている1000行を言うと、それ自身にリダイレクトし、追跡するためにGETを使用して次の1000を処理する。たとえば:
index.php?p=0
はその後
index.php?p=1000
、
にリダイレクトしかし、私は、全体の事を開くことなく、既存の文書に追加する方法を見つけることができません。
キャッシュ!私はそれを設定していない、良いコール。クイックフォローアップの質問、大量の書込みがある大量のドキュメントの場合、どのキャッシュメソッドを選択しますか?私は 'cache_to_discISAM'を試してみましたが、これは約6,000列までの10,000行まで働いていましたが、60,000でバグアウトしました。私が間違ってしまわないようにしてください10,000は素晴らしいですが、十分なものになりますが、私は自分のアプリをテストするのが好きです。この場合の速度は気にしません – Chris
編集2 - 私はApache/Linuxサーバー上で実行しています(キャッシュを勝ち取る) – Chris
現行のプロダクションリリースのキャッシュメソッドはすべて、 "のように、DiskISAMはphpTempと同様に、メモリ内のファイルにセル参照のサイズと位置を保持しています。プロダクションコードで最もメモリ効率の良いキャッシングメカニズムは、memcache、APC、WinCacheです。マップは単純な「セル存在」ブール値です。最新のSVNコード(プレリリーステスト版)はSQLiteをキャッシュオプションとして追加しています。これはさらにメモリ効率が良いです(メモリ内のマップは全くありません。すべてがSQLite内にあります) –