#この記事の動作環境: Windows10 システム、php 7、thinkpad t480 コンピューター。 Excel のエクスポートで問題に遭遇した友人は多いと思いますが、phpexcel クラスを使用すると便利だと思うかもしれません。しかし、大量のデータをエクスポートする場合には、タイムアウトやメモリ オーバーフローの問題が発生することが多く、エクスポートはそれほど単純ではないことがわかります。以下の解決策を見てみましょう。 PHPExcel は、Excel を処理するための非常に強力な PHP オープン ソース クラスですが、大きな問題は、メモリを大量に消費することです。1.7.3 以降、セル キャッシュ メソッドの設定をサポートしていますが、推奨されています。以前のバージョンにはさまざまな程度のバグがあるため、現在の安定バージョン 1.7.6 を使用してください。 PHPExcel はセルあたり平均 1k のメモリを使用するため、大きなドキュメントはメモリを急速に消費します。セル キャッシュ メカニズムにより、PHPExcel は小さなセル オブジェクトをディスク上のメモリ、または APC、memcache、または Wincache にキャッシュできます。データの読み取りには時間がかかりますが、メモリ消費量を削減できます。 デフォルトでは、PHPExcel はセル オブジェクトをメモリに保存しますが、カスタマイズすることができます。 PHPExcel_Settings::setCacheStorageMethod() メソッドを使用し、キャッシュ メソッドをパラメータとしてこのメソッドに渡して、キャッシュ メソッドを設定できます。 Php コード:PHP で Excel をエクスポートする際の 500 エラーの解決策: [PHPExcel_Settings::setCacheStorageMethod()] メソッドを使用して、キャッシュ メソッドをパラメータとしてメソッドに渡し、キャッシュを設定します。
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory; PHPExcel_Settings::setCacheStorageMethod($cacheMethod);setCacheStorageMethod() メソッドは、設定が成功したかどうかを示す BOOL 変数を返します (たとえば、APC が使用できない場合に、APC キャッシュを使用するように設定した場合)。場合は false が返されます)各ワークシートには独立したキャッシュがあり、ワークシートがインスタンス化されると、設定または構成されたキャッシュ メソッドに従って自動的に作成されます。ファイルの読み取りを開始するか、最初のワークシートを作成した後は、キャッシュ方法を変更することはできません。 現在、次のキャッシュ メソッドが利用可能です: Php コード:
PHPExcel_CachedObjectStorageFactory::cache_in_memory;デフォルトでは、キャッシュ メソッドを初期化しない場合、PHPExcel はメモリ キャッシュを使用します。方法。 =========================================== == ===Php コード:
PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized;このキャッシュ方法を使用すると、セルはシリアル化された方法でメモリに保存され、メモリ使用量を削減する比較的高性能な方法です。プラン。 =========================================== == ===Php コード:
PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;この方法はシリアル化方法と同様に、シリアル化後に gzip 圧縮を実行してメモリに配置するため、さらにコストが削減されます。使用には問題ありませんが、読み取りと書き込みの際に多少の速度が低下します。 =========================================== == ===============Php コード:
PHPExcel_CachedObjectStorageFactory::cache_to_discISAM;cache_to_discISAM を使用すると、すべてのセルが一時ディスク ファイルに保存されます。ファイル内の場所は PHP のメモリに保存されます。これはメモリ内キャッシュよりも遅くなりますが、メモリ使用量を大幅に削減できます。一時ディスク ファイルは、スクリプトが終了すると自動的に削除されます。 =========================================== == ===============Php コード:
PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;cache_to_discISAM と同様に、cache_to_phpTemp を使用する場合でも、すべてのセルには php: //一時 I/O ストリームは、その位置のみを PHP のメモリに保存します。 PHP の php://memory ラッパーはデータをメモリに保存します。php://temp も同様に動作しますが、保存されたデータのサイズがメモリ制限を超えると、データは一時ファイルに保存されます。デフォルトのサイズは 1MB です。ただし、初期化中に変更できます:Php コード:
$cacheMethod = PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp; $cacheSettings = array(’memoryCacheSize’ => ’8MB’ ); PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings); php://temp文件在脚本结束是会自动删除。======================== == =================================Php コード:
PHPExcel_CachedObjectStorageFactory::cache_to_apc;## cach_to_apc を使用すると、セルは APC に保存され、インデックスのみがメモリに保存されます。デフォルトの APC キャッシュ タイムアウトは 600 秒で、ほとんどのアプリケーションには十分です。もちろん、初期化中に変更することもできます:
Php コード:
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_APC; $cacheSettings = array(’cacheTime’ => 600 ); PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
スクリプトが終了すると、すべてのデータは APC からクリアされ (キャッシュ時間を無視)、このメカニズムを永続的なキャッシュとして使用することはできません。
=========================================== == ===============
Php コード:
PHPExcel_CachedObjectStorageFactory::cache_to_memcache
cache_to_memory を使用すると、セル オブジェクトは memcache に保存され、インデックスのみが保存されます。記憶の中で。デフォルトでは、PHPExcel はローカルホストとポート 11211 で memcache サービスを検索します。タイムアウトは 600 秒です。他のサーバーまたは他のポートで memcache サービスを実行する場合は、初期化中に変更できます:
Php code:
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_memcache; $cacheSettings = array( ’memcacheServer’ => ’localhost’, ‘memcachePort’ => 11211, ‘cacheTime’ => 600 ); PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
初期化設定の観点から見ると、MS は複数の memcache サーバーのポーリング方法をまだサポートしていません。これは残念です。
スクリプトが終了すると、すべてのデータが memcache からクリアされます (キャッシュ時間は無視されます)。このメカニズムは永続ストレージには使用できません。
=========================================== == ===============
PHP コード:
PHPExcel_CachedObjectStorageFactory::cache_to_wincache;
使用cache_towincache方式,单元格对象会保存在Wincache中,只在内存中保存索引,默认情况下Wincache过期时间为600秒,对绝大多数应用是足够了,当然也可以在初始化时修改:
Php代码:
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_wincache; $cacheSettings = array(’cacheTime’ => 600); PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
PHPExcel还是比较强大的,最大的问题就是内存占用的问题,PHPExcel啥时候能出一个轻量级的版本,不需要那么多花哨的功能,只需要导出最普通的数据的版本就好了!
推荐学习:php培训
以上がPHP で Excel をエクスポートするときに 500 エラーが発生した場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。