phpExcel が大量のデータをエクスポートする場合のメモリ オーバーフロー エラーの解決策_PHP チュートリアル

WBOY
リリース: 2016-07-13 17:06:01
オリジナル
942 人が閲覧しました

xlsファイルのインポートやインポートにはphpExcelを使用することが多いですが、一度にエクスポートするデータが比較的大きい場合にメモリオーバーフローエラーが発生しますので、以下に解決策をまとめておきます。

phpExcelは読み取ったセル情報をメモリに保存し、渡すことができます

コードは次のとおりです コードをコピー

PHPExcel_Settings::setCacheStorageMethod()

さまざまなキャッシュ方法を設定することで、メモリ消費量を削減するという目的は達成されました。

1. セルデータをシリアル化してメモリに保存します

コードは次のとおりです コードをコピー

PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized;

2. セルをシリアル化し、Gzip 圧縮してメモリに保存します

コードは次のとおりですコードをコピー3. 一時ディスク ファイルへのキャッシュが遅くなる可能性があります
PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;

コードは次のとおりですPHPExcel_CachedObjectStorageFactory::cache_to_discISAM;4. php://temp
コードをコピー

に保存します。

コードは次のとおりですPHPExcel_CachedObjectStorageFactory::cache_to_phpTemp; 5.memcacheに保存します
コードをコピー

PHPExcel_CachedObjectStorageFactory::cache_to_memcache

例:

方法 4:

コードは次のとおりですコードをコピー$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp; $cacheSettings = array( 'memoryCacheSize' => '8MB' ); PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);


タイプ 5:

その他の方法
コードは次のとおりです コードをコピー

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_memcache; $cacheSettings = array( 'memcacheServer' => 'localhost',
「memcachePort」 => 11211、
'キャッシュ時間' => 600
); PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

最初の方法では、複数の Excel ファイルを生成する必要はありません。データの合計量に基づいて各シートがエクスポートする行数を計算します。以下は、PHPExcel が複数のシートを生成する方法です。

以下は、PHPExcel が複数のシートを生成する方法です:

コードは次のとおりですコードをコピー$sheet = $objPHPExcel->getActiveSheet(); $sheet->setCellValue('A1',$x);
$sheet->setCellValue('B1',$y);

2 番目の方法では、毎回ページを更新せずに、バッチでエクスポートする ajax を検討できます。

コードは次のとおりです

コードをコピー$('#export').click(function() { $.ajax({ コードをコピー
Excel にエクスポート

URL: "export.php"、

data: getData(), //php でこの場所を取得することもできます。通常はデータベースを読み取ります

成功: 関数(応答){

window.location.href = response.url;

}

})

});

コードは次のとおりです

//export.php $data = $_POST['データ'];

$xls = 新しい PHPExcel();
$xls->loadData($formattedData);

$xls->exportToFile('excel.xls');

$response = array(

「成功」 => true、

'url' => $url

);

header('コンテンツタイプ: application/json');

エコー json_encode($response);

?>

データの量が大きい場合は、2 番目の方法である ajax を使用してデータをエクスポートすることをお勧めします。上記の方法は単に処理を提供するだけであり、詳細を自分で追加できます。


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/630726.html技術記事 phpExcelを使ってxlsファイルをインポートしたりインポートしたりすることが多いのですが、一度にエクスポートするデータが比較的大きい場合にメモリオーバーフローエラーが発生してしまうことがありますので、解決方法を以下にまとめておきます。 phpExcel は単一のファイルを読み取ります...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!