0
当我尝试生成PHPExcel大文件,我得到这个错误:PHPExcel写XLSX文件,允许内存大小
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 67 bytes)
这里的示例代码这将导致此:
$CI = & get_instance();
$CI->load->library ('export/PHPExcel');
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex (0);
$rowCount = 1;
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw");
$objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");
$objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");
$objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowCount,'title'.$rowCount);
$objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowCount,'title'.$rowCount);
$objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowCount,'title'.$rowCount);
$objPHPExcel->getActiveSheet()->SetCellValue('D'.$rowCount,'title'.$rowCount);
$objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowCount,'title'.$rowCount);
$objPHPExcel->getActiveSheet()->SetCellValue('F'.$rowCount,'title'.$rowCount);
for($i=0; $i<1000000; $i++){
$rowCount++;
$objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowCount, "xyz".$rowCount);
$objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowCount, "xyz".$rowCount);
$objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowCount, "xyz".$rowCount);
$objPHPExcel->getActiveSheet()->SetCellValue('D'.$rowCount, "xyz".$rowCount);
$objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowCount, "xyz".$rowCount);
$objPHPExcel->getActiveSheet()->SetCellValue('F'.$rowCount, "xyz".$rowCount);
}
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="your_name.xls"');
header('Cache-Control: max-age=0');
$objWriter = new PHPExcel_Writer_Excel2007 ($objPHPExcel);
$objWriter->save ('php://output');
现在的问题是如何避免这个问题,当我想用PHPExcel生成大的xlsx文件?或者,也许你知道更好的文学作品?我无法更改apache/php配置以提供更多内存。解决方案不应该依赖于内存。
php只能根据内存分配做很多事情。你试图生成的文件超过了128MB(猜测你的当前限制),因此它不能这样做。你不能提高你的内存限制在PHP?大多数(甚至共享)托管允许自定义php.ini,如果你没有访问服务器... –
128 MB是相当糟糕的主机限制。你可以通过PHP来改变它吗? '的ini_set( 'memory_limit的', '256M');'? – jtheman