ホームページ > バックエンド開発 > PHPチュートリアル > PHPExcel のメモリ リークを解決する例を共有する

PHPExcel のメモリ リークを解決する例を共有する

*文
リリース: 2023-03-18 11:54:01
オリジナル
1877 人が閲覧しました

この記事では、主に 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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート