2014-02-09 3 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

Я получаю ту же ошибку, пытаясь вывести excel с 4k строк, я думаю, PHPExcel имеет утечку памяти с вещами с более чем 2 o 3k записей –

+0

http://stackoverflow.com/questions/4817651/phpexcel-runs- out-of-256-512-and-also-1024mb-of-ram –

+0

Спасибо, я попробовал ($ objReader-> setReadDataOnly (true);) но это не работает ... – Bas

ответ

1

Если у вас не хватает памяти для обработки большого количества клеток, то рекомендуемый метод уменьшения использования памяти является использование кэширования клеток, как описано в разделе 4.2.1. документации разработчика.

+0

Я попробую ... спасибо за подсказку, а также урок английского языка ** утечка памяти ** –

+0

Невозможный голос Марк Бейкер: (Thnx! – Bas

Смежные вопросы