MySQL 데이터베이스의 데이터를 사용하여 PHPExcel을 사용하여 Excel 문서를 만듭니다. 내 스크립트는 RAM 512MB의 아래에서 실행해야합니다, 내 수출이 20 만 개 기록에 도달 나는 문제로 실행하고 있습니다 : I 가능한 RAM의 적은 양으로 큰 문서를 만들 수 PHPExcel 사용 방법작은 메모리 풋 프린트로 큰 행을 Excel 문서로 내보내기
PHP Fatal error: Allowed memory size of...
를?
내 현재 코드 :
// Autoload classes
ProjectConfiguration::registerPHPExcel();
$xls = new PHPExcel();
$xls->setActiveSheetIndex(0);
$i = 0;
$j = 2;
// Write the col names
foreach ($columnas_excel as $columna) {
$xls->getActiveSheet()->setCellValueByColumnAndRow($i,1,$columna);
$xls->getActiveSheet()->getColumnDimensionByColumn($i)->setAutoSize(true);
$i++;
}
// paginate the result from database
$pager = new sfPropelPager('Antecedentes',50);
$pager->setCriteria($query_personas);
$pager->init();
$last_page = $pager->getLastPage();
//write the data to excel object
for($pagina =1; $pagina <= $last_page; $pagina++) {
$pager->setPage($pagina);
$pager->init();
foreach ($pager->getResults() as $persona) {
$i = 0;
foreach ($columnas_excel as $key_col => $columnas) {
$xls->getActiveSheet()->setCellValueByColumnAndRow($i,$j,$persona->getByName($key_col, BasePeer::TYPE_PHPNAME));
$i++;
}
$j++;
}
}
// write the file to the disk
$writer = new PHPExcel_Writer_Excel2007($xls);
$filename = sfConfig::get('sf_upload_dir') . DIRECTORY_SEPARATOR . "$cache.listado_personas.xlsx";
if (file_exists($filename)) {
unlink($filename);
}
$writer->save($filename);
CSV 버전 : 추진가 데이터베이스에 요청하는 경우
// Write the col names to the file
$columnas_key = array_keys($columnas_excel);
file_put_contents($filename, implode(",", $columnas_excel) . "\n");
//write data to the file
for($pagina =1; $pagina <= $last_page; $pagina++) {
$pager->setPage($pagina);
$pager->init();
foreach ($pager->getResults() as $persona) {
$persona_arr = array();
// make an array
foreach ($columnas_excel as $key_col => $columnas) {
$persona_arr[] = $persona->getByName($key_col, BasePeer::TYPE_PHPNAME);
}
// append to the file
file_put_contents($filename, implode(",", $persona_arr) . "\n", FILE_APPEND | LOCK_EX);
}
}
아직도, RAM의 문제가이 추진 같다 새로운 요청을 할 때마다 RAM을 해제하지 않습니다. 각 반복에서 호출기 객체를 만들고 삭제하려고 시도했습니다.
더 잘 설명 할 수 있습니까? –
CSV를 만드는 대신 파일을 쓸 수 있습니까? – Brad
CSV로 내보내기위한 chages를 만들었으며 비슷한 문제가 있습니다. – rkmax