4

私は最近このライブラリ(CodePlexからのもの)を使い始めましたが、いくつかの問題に遭遇しました。私の目標は、それを使用して、複数のExcelファイルからのデータを処理し、そのようなデータをファイルごとにデータベースに送信できるようにすることです。私は次のようなことをしています:

foreach( $file_list as $file ) {

    $book = PHPExcel_IOFactory::load( $path . $file );

}

したがって、foreach内では、(今のところ)ユーザーにデータを表示しているだけですが、5つのファイルの後、メモリエラーが発生します。

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 50688 bytes) in /var/www/test/classes/PHPExcel/Shared/OLERead.php on line 76

各ファイルがロードされた後にオブジェクトを__破壊する方法はありますか?それで、スペースを蓄積するのではなく、次のファイルのために予約(解放)しますか、それともこの理由と回避策を知っていますか?

何か提案があれば教えてください。

前もって感謝します。

4

2 に答える 2

2

PHPExcelの最新のSVNコード(今日チェックインしたばかり)では、メモリ使用量を削減するためにセルキャッシングが導入されています...これは非常に新しい機能であり、まだ文書化する時間がありません。デフォルトの方法は現在の方法と同じですが、ワークシートの<->セルの関係に循環参照が含まれていますが、メモリを削減するキャッシュメカニズムのいずれかを使用すると、この循環参照を排除できると思います。そうでない場合は、私に知らせてください。キャッシュ用にセルをシリアル化するときにこの接続をすでに無効にしているキャッシュロジックの一部を使用して、ワークブック/ワークシートの設定を解除するときに参照を解除できるはずです。

于 2010-04-23T20:26:21.320 に答える
0

これはしばらくの間問題でした、そしてそれを回避する方法があるようには見えません-つまり、5.3のリリース以来誰かが何か賢いものを考え出さない限り......

「...PHP5.3でこれが修正されるようです。しかし、どこかでこれを確認したいと思います。」[2008年10月21日]

ソース)(その他のもの

于 2010-04-23T18:28:32.967 に答える