這篇文章主要介紹了PHPExcel記憶體洩漏問題解決方法,本文先是講解了造成記憶體洩漏的原因,然後給出了解決方法,需要的朋友可以參考下
使用PHPExcel 來產生excel文件是比較消耗記憶體的,有時候可能會需要透過一個循環來把大數據切分成若干個小的excel 文件保存來避免記憶體耗盡。
然而PHPExcel 存在circular references 的情況(看似在最新的1.6.5 版本中仍然沒有去解決這個問題),如果在一次http 請求過程中反覆多次構建PHPExcel 及PHPExcel_Writer_Excel5 物件實例來完成多個excel 文檔產生操作的話,所有被建構的物件實例都無法在http 請求結束之前及時釋放,從而造成記憶體洩漏。
解決方法是在PHPExcel_Worksheet 類別中增加方法:
public function Destroy() { foreach($this->_cellCollection as $index => $dummy) { $this->_cellCollection[$index] = null; } }
並在PHPExcel 類別中增加方法:
public function Destroy() { foreach($this->_workSheetCollection as $index => $dummy) { $this->_workSheetCollection[$index]->Destroy(); $this->_workSheetCollection[$index] = null; } }
接著在需要資源回收的地方明確的呼叫PHPExcel::Destroy() 來處理循環參考的問題。注意 __destruct() 方法是在物件被認為可以釋放的時候才會被調用,所以循環引用的處理不能放到 __destruct() 來進行。
相關閱讀:
Thinkphp5+PHPExcel實作批次上傳表格資料功能_php實例
############################################################################################################################################################# #######PHPExcel實作凍結鎖定表頭的方法介紹###################Yii2框架中實作PHPExcel匯出Excel檔案的方法分享###### ####以上是解決PHPExcel記憶體洩漏的實例分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!