ホームページ バックエンド開発 PHPチュートリアル PHPExcel エクスポートの大量データのタイムアウトとメモリ例外のソリューション

PHPExcel エクスポートの大量データのタイムアウトとメモリ例外のソリューション

Jun 13, 2016 pm 12:08 PM
cache memory nbsp php phpexcel

大量のデータをエクスポートするときの PHPExcel のタイムアウトとメモリ エラーの解決策
PHP の Excel へのエクスポートは、phpexcel クラスを使用すると非常に便利ですが、大きなデータをエクスポートする場合はそれほど単純ではありません。多くの場合、タイムアウトやメモリ オーバーフローが発生することがあります。ここでは、一緒に学び、一緒に進歩するいくつかの方法を紹介します。 。 。

PHPExcel は、Excel を処理するための非常に強力な PHP オープン ソース クラスですが、メモリを大量に消費するという大きな問題があります。1.7.3 以降、セル キャッシュ メソッドの設定をサポートしていますが、これをお勧めします。現在の安定バージョン 1.7.6 を使用します。以前のバージョンにはさまざまな程度のバグがあるため、以下はその公式ドキュメントです:

PHPExcel1.7.6 公式ドキュメントには、

PHPExcel は平均を使用します。ワークシート内のセルあたり約 1k なので、大きなワークブックでは使用可能なメモリがすぐに使い果たされる可能性があります。 セル キャッシュは、PHPExcel がセル オブジェクトをより小さいサイズのメモリ、ディスク上、または APC、memcache、または Wincache に保持できるようにするメカニズムを提供します。これにより、セル データへのアクセス速度が犠牲になりますが、大きなワークブックのメモリ使用量を削減できます。

PHPExcel はセルあたり平均 1k のメモリを使用するため、大きなドキュメントではメモリ使用量が減少します。消費も非常に早くなります。セル キャッシュ メカニズムを使用すると、PHPExcel は小さなセル オブジェクトをディスク上のメモリ、または APC、memcache、または Wincache にキャッシュできます。データの読み取りには時間がかかりますが、メモリ消費量を削減できます。

PHPExcel1.76。

デフォルトでは、PHPExcel はすべてのセル オブジェクトをメモリ内に保持しますが、セル キャッシュを有効にするには、PHPExcel_Settings:: の呼び出しを保留する必要があります。 setCacheStorageMethod() メソッド。使用するキャッシュ メソッドを渡します。

デフォルトでは、PHPExcel はセル オブジェクトをメモリに保存しますが、カスタマイズすることができます。 PHPExcel_Settings::setCacheStorageMethod() メソッドを使用し、キャッシュ メソッドをパラメータとしてこのメ​​ソッドに渡して、キャッシュ メソッドを設定できます。

Php コード:

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory;

PHPExcel_Settings::setCacheStorageMethod($cacheMethod);

PHPExcel1.7.6 公式ドキュメントの書き込みDao

setCacheStorageMethod() は、成功した場合はブール値 true、失敗した場合は false を返します (たとえば、APC が有効になっていないときに APC にキャッシュしようとした場合)。

setCacheStorageMethod() は BOOL を返します。 type変数は設定が成功したかどうかを示すために使用されます(例えば、APCが使用できない場合にAPCキャッシュを使用するように設定した場合はfalseが返されます)

PHPExcel1.7.6の公式ドキュメントでは
個別のキャッシュは個々のワークシートごとに保持され、構成したキャッシュ方法と設定に基づいてワークシートがインスタンス化されるときに自動的に作成されます。ワークブックの読み取りを開始したり、ワークブックを作成したりすると、構成設定を変更することはできません。最初のワークシート。

各ワークシートには独立したキャッシュがあり、ワークシートがインスタンス化されると、設定または構成されたキャッシュ メソッドに従って自動的に作成されます。ファイルの読み取りを開始するか、最初のワークシートを作成した後は、キャッシュ方法を変更することはできません。

PHPExcel1.7.6 公式ドキュメントの記述

現在、次のキャッシュ メソッドが利用可能です。

現在、次のキャッシュ メソッドが利用可能です:

Php コード:

PHPExcel_CachedObjectStorageFactory::cache_in_memory;

PHPExcel1.7.6 公式ドキュメントには

キャッシュ メソッドを初期化しない場合、これが PHPExcel のデフォルトのメソッドです。 Cell オブジェクトは現在と同様に PHP メモリに保持されます。

デフォルトでは、キャッシュ メソッドを初期化しない場合、PHPExcel はメモリ キャッシュ メソッドを使用します。

=========================================== == ===

PHP コード:

PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized;

PHPExcle1.7.6 公式ドキュメントの書き込み

このキャッシュ方法を使用すると、セルはシリアル化されたオブジェクトの配列として PHP メモリに保持されるため、パフォーマンスのオーバーヘッドが最小限に抑えられ、メモリの使用量が削減され、比較的高い効率とパフォーマンスを実現します。

=========================================== == ===

PHP コード:

PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;

PHPExcel1.7.6 公式ドキュメントの記述

cache_in_memory_serialized と同様、このメソッドはセルを保持しますシリアル化されたオブジェクトの配列として PHP メモリ内に保存されますが、メモリ使用量をさらに削減するために gzip 圧縮されますが、セルの読み取りまたは書き込みへのアクセスは若干遅くなります。シリアル化方法と同様に、この方法でもシリアル化後に gzip 圧縮を実行してメモリに格納します。この方法ではメモリ使用量がさらに削減されますが、読み取りと書き込みの速度が少し遅くなります。

=========================================== == ===============

Php コード:

PHPExcel_CachedObjectStorageFactory::cache_to_discISAM;

PHPExcel1.7.6 公式ドキュメントには次のように書かれています

cache_to_discISAM を使用すると、すべてのセルが一時ディスク ファイルに保持され、そのファイル内のセルの位置へのインデックスのみが PHP メモリに保持されます。これは、どのcache_in_memory メソッドよりも低速ですが、メモリ フットプリントが大幅に削減されます。一時ディスク ファイルは、スクリプトが終了すると自動的に削除されます。

cache_to_discISAM を使用すると、すべてのセルが一時ディスク ファイルに保存され、ファイル内のセルの位置のみが PHP のメモリに保存されます。どのインメモリ キャッシュよりも遅くなりますが、メモリ使用量を大幅に削減できます。一時ディスク ファイルは、スクリプトが終了すると自動的に削除されます。

=========================================== == ===============

Php コード:

PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;

PHPExcel1.7.6 公式ドキュメントの書き込み

cache_to_discISAM と同様に、cache_to_phpTemp を使用すると、すべてのセルが php://temp I/O ストリームに保持され、その位置へのインデックスのみが PHP メモリに保持されます。PHP では、php://memory ラッパーが保存します。メモリ内のデータ: php://temp も同様に動作しますが、特定のメモリ制限に達した場合にデータを保存するために一時ファイルを使用します。デフォルトは 1 MB ですが、cache_to_phpTemp.
cache_to_discISAM と同様に、cache_to_phpTemp を使用すると、すべてのセルが php://temp I/O ストリームに存在し、その位置のみが PHP のメモリに保存されます。 PHP の php://memory ラッパーも同様にデータをメモリに保存しますが、保存されたデータのサイズがメモリ制限を超えると、データは一時ファイルに保存されます。デフォルトのサイズは 1MB です。ただし、初期化中に変更できます:

Php コード:

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;

$cacheSettings = array( 'memoryCacheSize' => '8MB ' );

PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

PHPExcel1.7.6 公式ドキュメントには

php://temp ファイルは自動的に削除されますスクリプトが終了します。

php://temp ファイルは、スクリプトが終了すると自動的に削除されます。

=========================================== == ===============

Php コード:

PHPExcel_CachedObjectStorageFactory::cache_to_apc;

PHPExcle1.7.6 公式ドキュメントの書き込み

cache_to_apc を使用する場合、セル オブジェクトは APC に保持され、セルが存在することを識別するためにインデックスのみが PHP メモリに保持されます。デフォルトでは、600 秒の APC キャッシュ タイムアウトが使用されます。これは、ほとんどのアプリケーションでは十分です。 :ただし、cache_to_APC の初期化時にこれを変更することは可能です。

cache_to_apc を使用すると、セルは APC に保存され、インデックスのみがメモリに保存されます。デフォルトの APC キャッシュ タイムアウトは 600 秒で、ほとんどのアプリケーションには十分です。 もちろん、初期化中に変更することもできます:

Php コード:



$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_APC;

$cacheSettings = array( 'cacheTime' => 600 );

PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

PHPExcel1 .7.6 公式ドキュメントには次のように書かれています

スクリプトが終了すると、cacheTime 値に関係なく、すべてのエントリが APC からクリアされるため、このメカニズムを使用して永続ストレージとして使用することはできません。

の実行が終了すると、すべてのデータが APC からクリアされ (キャッシュ時間は無視されます)、このメカニズムは永続的なキャッシュとして使用できません。

=========================================== == ===============

PHP コード:



PHPExcel_CachedObjectStorageFactory::cache_to_memcache

PHPExcel1。 7.6 公式 ドキュメントには次のように書かれています

cache_to_memcache を使用すると、セル オブジェクトは memcache に維持され、セルが存在することを識別するためにインデックスのみが PHP メモリに維持されます。

デフォルトでは、PHPExcel は memcache を探します。また、別のサーバーまたはポートで memcache を実行している場合は、cache_to_memcache:

を初期化するときにこれらのデフォルトを変更できます。cache_to_memory を使用すると、セル オブジェクトは memcache に保存され、インデックスのみがメモリに保存されます。デフォルトでは、PHPExcel はローカルホストおよびポート 11211 で memcache サービスを検索します。タイムアウトは 600 秒です。他のサーバーまたは他のポートで memcache サービスを実行する場合は、初期化中に変更できます:

Phpコード:

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_memcache;

$cacheSettings = array( 'memcacheServer' => 'localhost',

'memcachePort' => 11211 ,

'cacheTime' => 600

);

PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

初期化の形式から設定では、MS はまだ複数の memcache サーバーのポーリング方法をサポートしていません。これは残念です。

PHPExcel1.7.6 公式ドキュメントには、

スクリプトが終了すると、cacheTime 値に関係なく、すべてのエントリが memcache からクリアされるため、このメカニズムを使用して永続ストレージとして使用することはできません。

スクリプトが終了すると、すべてのデータが memcache からクリアされ (キャッシュ時間は無視されます)、このメカニズムは永続ストレージには使用できません。

=========================================== == ===============

Php コード:

PHPExcel_CachedObjectStorageFactory::cache_to_wincache;

PHPExcel1.7.6 公式ドキュメントの書き込み

cache_to_wincache を使用する場合、セル オブジェクトは Wincache で維持され、セルが存在することを識別するためにインデックスのみが PHP メモリに維持されます。デフォルトでは、600 秒の Wincache キャッシュ タイムアウトが使用されます。これは、ほとんどのアプリケーションでは十分です。 :ただし、cache_to_wincache の初期化時にこれを変更することは可能です。

cache_towincache メソッドを使用すると、セル オブジェクトは Wincache に保存され、インデックスのみがメモリに保存されます。デフォルトでは、Wincache の有効期限は次のとおりです。 600 秒 (これは絶対的な長さです) ほとんどのアプリケーションでは十分であり、もちろん初期化中に変更できます:

Php code:

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_wincache;

$cacheSettings = array( 'cacheTime ' => 600 );

PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

PHPExcel 公式ドキュメント 1.7.6 が書きました

スクリプトが終了すると、cacheTime 値に関係なく、すべてのエントリが Wincache からクリアされるため、このメカニズムを使用して永続ストレージとして使用することはできません。

PHPExcel は依然として比較的強力です。最大の問題は、メモリ使用量。PHPExcel はいつになったら、多くの高度な機能を必要とせず、最も一般的なデータ バージョンをエクスポートするだけで済む軽量バージョンを作成できるようになります。

上記の内容は、LZ がインターネットで見つけた比較的良い記事であり、私の問題を完全に解決したわけではありませんが、よく書かれていると感じたので、メモとして取り上げたいと思います。私が見た子供たちの靴に役立つかもしれません!

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

See all articles