2014-02-09 85 views
0

我已经创建了一个脚本,并且出现以下错误。如果将内存大小升级到7g仍然是错误。所以我试图追加10000条记录并保存,并为下一个10000去解决它,工作,但仍然得到错误。致命错误:允许的xxx字节内存大小已耗尽Php excel

是否有任何方法来刷新工作簿或其他方法?

Thnx!

的awnser:

PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings); 
$cacheMethod = PHPExcel_CachedObjectStorageFactory:: cache_to_discISAM; 
$cacheSettings = array( 
    'dir' => '/home/domains/xxxx.nl/public_html/xxxxx' 
); 



require_once 'PHPExcel.php'; 
require_once 'PHPExcel/Writer/Excel2007.php'; 
require_once 'PHPExcel/IOFactory.php'; 



$counter = $result->num_rows;//159920 
$spreadsheet = new PHPExcel(); 
$spreadsheet->setActiveSheetIndex(0); 
$worksheet = $spreadsheet->getActiveSheet(); 


//header 
$worksheet->setCellValueExplicit('A' . 1, 'Filename', PHPExcel_Cell_DataType::TYPE_STRING); 
etc 
etc 

$rownr = 2; 
$counterN = 0; 
while ($row = mysqli_fetch_assoc($result)) { 
    $worksheet->setCellValueExplicit('A' . $rownr, utf8_encode($row['filename']), PHPExcel_Cell_DataType::TYPE_STRING); 
    etc 
    etc 

    if($counterN == 10000){ 

     $objWriter = new PHPExcel_Writer_Excel2007($spreadsheet); 
     $objWriter->save('test.xlsx'); 

     $objPHPExcel = PHPExcel_IOFactory::load("test.xlsx"); 
     $objPHPExcel->setActiveSheetIndex(0); 
     $row = $objPHPExcel->getActiveSheet()->getHighestRow()+1; 
     $counterN = 0; 
    } 
    $counterN++; 

} 

$objWriter = new PHPExcel_Writer_Excel2007($spreadsheet); 
$objWriter->save('test.xlsx'); 
+0

我得到相同的错误,试图输出一个4k行的Excel,我认为PHPExcel有超过2个3k记录的东西泄漏内存 –

+0

http://stackoverflow.com/questions/4817651/phpexcel-runs- 256-512-也-124mb-ram –

+0

谢谢,我试过了($ objReader-> setReadDataOnly(true);)但这不起作用... – Bas

回答

1

如果你没有足够的内存来处理大量的细胞,然后减少内存使用的推荐方法是使用细胞缓存,如部分中描述4.2.1.的开发者文档。

+0

我会尝试...谢谢你的提示,和英语课**内存泄漏** –

+0

无法投票Mark Ba​​ker: (Thnx! – Bas

相关问题