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);
다섯 번 째 종류:
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_memcache;
$cacheSettings = array( 'memcacheServer' => 'localhost',
'memcachePort' => 11211,
'cacheTime' => 600
);
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
다른 방법첫 번 째 방법 은 여러 개의 sheet 을 만 드 는 방식 을 고려 할 수 있 습 니 다.여러 개의 엑셀 파일 을 만 들 필요 가 없습니다.데이터 총량 에 따라 각 sheet 에서 몇 줄 을 내 보 내 는 지 계산 할 수 있 습 니 다.다음은 PHPExcel 에서 여러 개의 sheet 을 만 드 는 방법 입 니 다.
면 은 PHPExcel 로 여러 sheet 생 성 방법:
$sheet = $objPHPExcel->getActiveSheet();
$sheet->setCellValue('A1',$x);
$sheet->setCellValue('B1',$y);
두 번 째 방법 은 페이지 를 새로 고 칠 때마다 ajax 를 고려 하여 분할 내 보 낼 수 있 습 니 다.
<a href="#" id="export">export to Excel</a>
$('#export').click(function() {
$.ajax({
url: "export.php",
data: getData(), // php ,
success: function(response){
window.location.href = response.url;
}
})
});
<?php
//export.php
$data = $_POST['data'];
$xls = new PHPExcel();
$xls->loadData($formattedData);
$xls->exportToFile('excel.xls');
$response = array(
'success' => true,
'url' => $url
);
header('Content-type: application/json');
echo json_encode($response);
?>
데이터 양 이 많 으 면 두 번 째 방법 으로 ajax 를 사용 하여 데 이 터 를 내 보 내 는 것 을 권장 합 니 다.위의 방법 은 간단 한 절 차 를 주 었 습 니 다.구체 적 으로 당신 이 보충 하 세 요!