この記事では、主に PHPExcel のメモリ リークの問題の解決策を紹介します。この記事では、まずメモリ リークの原因を説明し、次に必要な解決策を説明します。
PHPExcel を使用して Excel ドキュメントを生成すると、より多くのメモリが消費されます。 . メモリの枯渇を避けるために、ループを使用して大きなデータをいくつかの小さな Excel ドキュメントに分割して保存する必要がある場合があります。
ただし、PHPExcel には循環参照があります (この問題は最新の 1.6.5 バージョンでも解決されていないようです)。複数の Excel ドキュメント生成操作を完了するために http リクエスト中に PHPExcel および PHPExcel_Writer_Excel5 オブジェクト インスタンスが複数回繰り返し構築される場合。 、構築されたすべてのオブジェクト インスタンスは http リクエストが終了する前に解放できず、メモリ リークが発生します。
解決策は、PHPExcel_Worksheet クラスにメソッドを追加します:
public function Destroy() { foreach($this->_cellCollection as $index => $dummy) { $this->_cellCollection[$index] = null; } }
そして、PHPExcel クラスにメソッドを追加します:
public function Destroy() { foreach($this->_workSheetCollection as $index => $dummy) { $this->_workSheetCollection[$index]->Destroy(); $this->_workSheetCollection[$index] = null; } }
次に、リソースの回復が必要な場所で PHPExcel::Destroy() を明示的に呼び出します。参考問題。 __destruct() メソッドは、オブジェクトを解放する準備ができたとみなされる場合にのみ呼び出されるため、__destruct() では循環参照の処理を実行できないことに注意してください。
関連読書:
Thinkphp5+PHPExcelでテーブルdata_phpの一括アップロード機能を実現
PHPExcelのヘッダーをフリーズしてロックする方法の紹介
PHPを実装するYii2 フレームワーク Excel エクスポート Excel ファイルを共有する方法
以上がPHPExcel のメモリ リークを解決する例を共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。