xlsファイルのインポートやインポートにはphpExcelを使用することが多いですが、一度にエクスポートするデータが比較的大きい場合にメモリオーバーフローエラーが発生しますので、以下に解決策をまとめておきます。
phpExcelは読み取ったセル情報をメモリに保存し、渡すことができます
コードは次のとおりです |
コードをコピー |
PHPExcel_Settings::setCacheStorageMethod()
|
さまざまなキャッシュ方法を設定することで、メモリ消費量を削減するという目的は達成されました。
1. セルデータをシリアル化してメモリに保存します
コードは次のとおりです |
コードをコピー |
PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized;
|
2. セルをシリアル化し、Gzip 圧縮してメモリに保存します
コードは次のとおりです
| コードをコピー
|
PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;
|
3. 一時ディスク ファイルへのキャッシュが遅くなる可能性があります
コードは次のとおりです
コードをコピー |
|
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 を検討できます。 |
コードは次のとおりです
コードをコピー
|
Excel にエクスポート
| $('#export').click(function() {
$.ajax({
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 を使用してデータをエクスポートすることをお勧めします。上記の方法は単に処理を提供するだけであり、詳細を自分で追加できます。
http://www.bkjia.com/PHPjc/630726.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/630726.html技術記事 phpExcelを使ってxlsファイルをインポートしたりインポートしたりすることが多いのですが、一度にエクスポートするデータが比較的大きい場合にメモリオーバーフローエラーが発生してしまうことがありますので、解決方法を以下にまとめておきます。 phpExcel は単一のファイルを読み取ります...
|
|