PHPExcel 記憶體洩漏問題

2021-05-25 05:36:05 字數 981 閱讀 9751

網上關於記憶體洩露的問題大都是再說匯出的時候,可這次我遇到的偏偏是匯入的時候。當然,只是針對excel2007格式的文件。

我測試過,乙個大概31列、500行的文件,實行匯入之後,php會報如下錯誤:

fatal error: allowed memory size of 209715200 bytes exhausted (tried to allocate 35 bytes) inx:/www/classes/phpexcel/cell.phpon line711

可是完全沒道理,因為相同的資料量,在2003的格式下匯入是沒有問題的。

於是我嘗試把資料量減少,比如減少到100行,可以成功讀出內容來。但是增加之後依舊會出現上面的錯誤。

於是在網上找到了一些方法,有乙個算比較靠譜兒。雖然在我這裡依舊沒用,但僅做記錄...

使用 phpexcel 來生成 excel 文件是比較消耗記憶體的,有時候可能會需要通過乙個迴圈來把大資料切分成若干個小的 excel 文件儲存來避免記憶體耗盡。

然而 phpexcel 存在 circular references 的情況(貌似在最新的 1.6.5 版本中仍然沒有去解決這個問題),如果在一次 http 請求過程中反覆多次構建 phpexcel 及 phpexcel_writer_excel5 物件例項來完成多個 excel 文件生成操作的話,所有被構建的物件例項都無法在 http 請求結束之前及時釋放,從而造成記憶體洩漏。

解決辦法是在 phpexcel_worksheet 類中增加方法:

並在 phpexcel 類中增加方法:

然後在需要資源**的地方顯式的呼叫 phpexcel::destroy() 來處理迴圈引用的問題。注意 __destruct() 方法是在物件被認為可以被釋放的時候才會被呼叫,所以迴圈引用的處理不能放到 __destruct() 來進行。

PHPExcel記憶體洩漏問題

使用 phpexcel 來生成 excel 文件是比較消耗記憶體的,有時候可能會需要通過乙個迴圈來把大資料切分成若干個小的 excel 文件儲存來避免記憶體耗盡。然而 phpexcel 存在 circular references 的情況 貌似在最新的 1.6.5 版本中仍然沒有去解決這個問題 如果...

PHPExcel記憶體洩漏問題解決方法

使用 phpexcel 來生成 excel 文件是比較消耗記憶體的,有時候可能會需要通過乙個迴圈來把大資料切分成若干個小的 excel 文件儲存來避免記憶體耗盡。然而 phpexcel 存在 circular references 的情況 貌似在最新的 1.6.5 版本中仍然沒有去解決這個問題 如果...

PHPExcel記憶體洩漏問題解決方法 PHP

使用 phpexcel 來生成 excel 文件是比較消耗記憶體的,有時候可能會需要通過乙個迴圈來把大資料切分成若干個小的 excel 文件儲存來避免記憶體耗盡。然而 phpexcel 存在 circular references 的情況 貌似在最新的 1.6.5 版本中仍然沒有去解決這個問題 如果...