検索
ホームページバックエンド開発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 までご連絡ください。
PHPの現在のステータス:Web開発動向を見てくださいPHPの現在のステータス:Web開発動向を見てくださいApr 13, 2025 am 12:20 AM

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHP対その他の言語:比較PHP対その他の言語:比較Apr 13, 2025 am 12:19 AM

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHP対Python:コア機能と機能PHP対Python:コア機能と機能Apr 13, 2025 am 12:16 AM

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHP:Web開発の重要な言語PHP:Web開発の重要な言語Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHP:多くのウェブサイトの基礎PHP:多くのウェブサイトの基礎Apr 13, 2025 am 12:07 AM

PHPが多くのWebサイトよりも優先テクノロジースタックである理由には、その使いやすさ、強力なコミュニティサポート、広範な使用が含まれます。 1)初心者に適した学習と使用が簡単です。 2)巨大な開発者コミュニティと豊富なリソースを持っています。 3)WordPress、Drupal、その他のプラットフォームで広く使用されています。 4)Webサーバーとしっかりと統合して、開発の展開を簡素化します。

誇大広告を超えて:今日のPHPの役割の評価誇大広告を超えて:今日のPHPの役割の評価Apr 12, 2025 am 12:17 AM

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPの弱い参照は何ですか、そしていつ有用ですか?PHPの弱い参照は何ですか、そしていつ有用ですか?Apr 12, 2025 am 12:13 AM

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

PHPで__invoke Magicメソッドを説明してください。PHPで__invoke Magicメソッドを説明してください。Apr 12, 2025 am 12:07 AM

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール