首頁 >後端開發 >php教程 >解決PHPExcel記憶體洩漏的實例分享

解決PHPExcel記憶體洩漏的實例分享

*文
*文原創
2017-12-25 13:52:451917瀏覽

這篇文章主要介紹了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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn