2015-01-04 76 views
1

我想清除phpexcel中的對象。多次迭代對象會導致內存不足錯誤。PHPExcel未設置對象不起作用

該文檔建議使用disconnectWorksheets,但它不起作用。

下面是代碼:

... 
$sheet = $instReader->getSheet($sheetOpts['sheet']); 
... 
echo "memo1:".ys_getmemusage()."\n";  
echo "size=". strlen(serialize($instReader))."\n"; 
$instReader->disconnectWorksheets(); 
unset($instReader);   
unset($sheet); 

gc_enable(); 
gc_collect_cycles(); 

echo "memo2:".ys_getmemusage()."\n"; 
exit; 

該文件是由PHPExcel_IOFactory標識的Excel文件::識別

爲Excel2007中

輸出是:

memo1:memoryused=45.34888458251953 (45meg) 

size=5962925 
memo2:memoryused=45.34407043457031 (45meg) 

人知道如何解決這個問題?

ys_getmemusage函數只是獲取內存使用如下。

$GLOBALS['raymemory_usage'] = memory_get_usage(); 
function ys_getmemusage() { 
    $end_memory = memory_get_usage() - $GLOBALS['raymemory_usage']; 
    $end_memory = $end_memory/(1024*1024); 
    return "memoryused=$end_memory\n"; 
} 

回答

4

找到了解決辦法

我更換

$instReader->disconnectWorksheets(); 
unset($instReader); 

$instReader->__destruct(); 
unset($instReader); 

和一切似乎都不錯。

0

我能夠使用公認的答案https://stackoverflow.com/a/27766461/4912853和小費來解決我的內存泄漏:Dump all variables in PHP

PHP釋放在函數的最後記憶,因此the_loop()

之前:

foreach($rows as $row){ 
    ... 
    $instReader->disconnectWorksheets(); 
    unset($instReader); 
} 

後:

function createExcelFile($row){ 
    ... 
    $instReader->__destruct(); 
    unset($instReader); 
} 

foreach($rows as $row){ 
    createExcelFile($row); 
} 

上面的說法肯定可以使用源代碼,但是這兩個想法一起完成了很多反覆試驗後的記憶問題。希望這可以幫助!