ホームページ  >  記事  >  バックエンド開発  >  PHPExcel のメモリ リーク関連の問題

PHPExcel のメモリ リーク関連の問題

WBOY
WBOYオリジナル
2016-06-13 13:15:11844ブラウズ

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() では循環参照の処理を実行できないことに注意してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。