2017-04-10 23 views
1

功能是像以下:PHPExcel庫在while循環中導致內存增加?

public function getFile($fileFullPath){ 
       echo round(memory_get_usage()/1024/1024,2).'MB'.PHP_EOL; 
     $PHPReader = PHPExcel_IOFactory::createReaderForFile($fileFullPath); 
     if(! $PHPReader){ 
      return false; 
     } 
     $PHPExcel = $PHPReader->load($fileFullPath); 
     $currentSheet = $PHPExcel->getActiveSheet(); 
       return $currentSheet 
} 

功能由一個while循環調用。在運行程序時,內存不斷增加。這樣的輸出信息:

➜ crontab git:(f_*****) ✗ php worker.php program_name.php 

1.64MB 
8MB 
10.56MB 
12.99MB 
15.68MB 
18.11MB 
20.54MB 
23.47MB 
25.91MB 
28.34MB 
30.77MB 

是任何人都熟悉的PHPExcel庫,並告訴我,我怎麼能初始化每一個之間的緩存,同時循環finaly回採使用內存的增加。

+0

什麼while循環? –

+0

您是否將此函數的結果(它的返回值)添加到數組或類似的東西?如果你多次這樣做,你會用完內存。也請向我們展示你的while循環。 –

+0

while循環只是一些其他與phpexcel無關的代碼。就像 : – digjack

回答

2

試過嗎?

$objPHPExcel->disconnectWorksheets(); 
unset($objPHPExcel); 
0

感謝您的關心。我找到了解決方案。在每個循環中。我刪除了表格的緩存:

while(true){ 
    $currentSheet = $this->getFile($fullPath); 
    ... //do anything with $currentSheet; 
    $currentSheet->disconnectWorksheets(); // drop the cache; 
} 

通過PHPlibrary的disconnectWorksheets。它刪除單元格的緩存。所以內存停止增加。