ホームページ >バックエンド開発 >PHPチュートリアル >PHPExcel のメモリ リーク問題の解決策、phpexcel Leak_PHP チュートリアル

PHPExcel のメモリ リーク問題の解決策、phpexcel Leak_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:09:201154ブラウズ

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

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/946744.html技術記事 PHPExcel のメモリ リーク問題、phpexcel リークの解決策。PHPExcel を使用して Excel ドキュメントを生成すると、場合によってはループを通じて大きなデータを分割する必要がある場合があります。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。