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);
다섯 번 째 종류:
 
 
$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 를 사용 하여 데 이 터 를 내 보 내 는 것 을 권장 합 니 다.위의 방법 은 간단 한 절 차 를 주 었 습 니 다.구체 적 으로 당신 이 보충 하 세 요!

좋은 웹페이지 즐겨찾기