PHPExcelで大きいエクセルファイルを読み込んだ際にFatal error: Allowed memory size of XXXXX exhausted

PHPExcelで大きなファイルを読み込んだ際、

Fatal error: Allowed memory size of 67108864 bytes exhausted

というエラーが発生する。

デフォルトはメモリにセルの内容をキャッシュしているため、大きなファイルを扱う際にはメモリ不足に陥る。
回避方法としてキャッシュの種類を変更できる仕組みがある

変更先は、ディスク,APC,memcache,wincache,sqlite,

キャッシュの種類

PHPExcel developer documentationのCell Cachingより

  • PHPExcel_CachedObjectStorageFactory::cache_in_memory
    デフォルト。メモリにセルオブジェクトをそのままメモリに保存
  • PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized
    シリアライズされたオブジェクト配列でメモリ上に保存
  • PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip
    cache_in_memory_serializedをさらにgzip圧縮して保存
  • PHPExcel_CachedObjectStorageFactory::cache_igbinary
    igbinary拡張を用いて、メモリに保存
  • PHPExcel_CachedObjectStorageFactory::cache_to_discISAM
    一時ファイルに保存
  • PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp
    php://tempに保存
  • PHPExcel_CachedObjectStorageFactory::cache_to_apc
    APCを利用して保存
  • PHPExcel_CachedObjectStorageFactory::cache_to_memcache
    memcacheに保存
  • PHPExcel_CachedObjectStorageFactory::cache_to_wincache
    wincacheに保存
  • PHPExcel_CachedObjectStorageFactory::cache_to_sqlite
    PHPExcel_CachedObjectStorageFactory::cache_to_sqlite3
    SQLiteに保存

PHPExcel_CachedObjectStorageFactory::cache_to_phpTempを使う場合

設定にキャッシュサイズを定義する

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
$cacheSettings = array( 'memoryCacheSize' => '32MB');
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

$objPHPExcel = PHPExcel_IOFactory::load($xlsxfile);

PHPExcel_CachedObjectStorageFactory::cache_to_discISAMを使う場合

設定に一時ファイルのパスを定義する

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_discISAM;
$cacheSettings = array('dir' => '/tmp');
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

$objPHPExcel = PHPExcel_IOFactory::load($xlsxfile);

参考サイト

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中