PHPExcelのメモリリーク問題の解決策、phpexcelリーク
PHPExcel を使用して Excel ドキュメントを生成すると、より多くのメモリが消費されます。場合によっては、メモリの枯渇を避けるために、ループを通じて大きなデータをいくつかの小さな Excel ドキュメントに分割して保存する必要があります。
ただし、PHPExcel には循環参照があります (この問題は最新の 1.6.5 バージョンでは解決されていないようです)。複数の Excel ドキュメント生成操作を完了するために、http リクエスト中に PHPExcel および PHPExcel_Writer_Excel5 オブジェクトのインスタンスが複数回繰り返し構築されると、構築されたオブジェクト インスタンスは http リクエストの終了前に解放できず、メモリ リークが発生します。
解決策は、PHPExcel_Worksheet クラスにメソッドを追加することです:
コードをコピーします コードは次のとおりです:
パブリック関数 Destroy() {
foreach($this->_cellCollection as $index => $dummy) {
$this->_cellCollection[$index] = null;
}
}
そして、PHPExcel クラスにメソッドを追加します:
コードをコピーします コードは次のとおりです:
パブリック関数 Destroy() {
foreach($this->_workSheetCollection as $index => $dummy) {
$this->_workSheetCollection[$index]->Destroy();
$this->_workSheetCollection[$index] = null;
}
}
次に、循環参照の問題を処理するためにリソースのリサイクルが必要となる PHPExcel::Destroy() を明示的に呼び出します。 __destruct() メソッドは、オブジェクトを解放する準備ができているとみなされる場合にのみ呼び出されるため、__destruct() では循環参照の処理を実行できないことに注意してください。
http://www.bkjia.com/PHPjc/946744.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/946744.html技術記事 PHPExcel のメモリ リーク問題、phpexcel リークの解決策。PHPExcel を使用して Excel ドキュメントを生成すると、場合によってはループを通じて大きなデータを分割する必要がある場合があります。