ホームページ >バックエンド開発 >PHPチュートリアル >PHPExcel のメモリ リーク関連の問題
PHPExcel のメモリ リークの問題
1. PHPExcel を使用して Excel ドキュメントを生成すると、メモリの枯渇を避けるために、大きなデータを複数の小さな Excel ドキュメントに分割して保存する必要がある場合があります。
?
ただし、PHPExcel には循環参照があります (最新バージョン 1.6.5 でもこの問題はまだ解決されていないようです)。 http リクエスト プロセス中に、PHPExcel および PHPExcel_Writer_Excel5 オブジェクト インスタンスが繰り返し構築され、複数の Excel が完成します。 ドキュメント生成操作の場合、構築されたすべてのオブジェクト インスタンスを http リクエストの終了前に解放できず、メモリ リークが発生します。 。
2. 解決策は、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() では循環参照の処理を実行できないことに注意してください。