3
我正在使用PHPExcel框架嘗試從mysql查詢中寫出非常大的excel文檔。PHPExcel - 寫入/追加塊
一切工作正常,直到我打了5000行的標記(或有大約的)所在頁面的時候,出現錯誤標記:
Fatal error: Allowed memory size of xxx bytes exhausted (tried to allocate yyy bytes) in zzz on line aaa
我知道這是記錄在案,我已經調整的內存分配服務器,但即使如此,我仍然觸及天花板。我也嘗試關閉格式化,但實際上我會需要它。
那麼有沒有辦法以小塊寫入,或追加到Excel文件,所以我沒有耗盡內存分配?我正在考慮沿着頁面的行寫1000行,然後重定向到自己並使用GET處理下一個1000以保持跟蹤。例如:
index.php?p=0
然後重定向到
index.php?p=1000
,
但我不能找到一種方法來添加到現有的文檔,而無需打開了整個事情。
Cache!我甚至沒有確定,好的電話。快速跟進問題,對於有大量寫入的大文檔,您會選擇哪種緩存方法?我剛剛嘗試過'cache_to_discISAM',它可以處理大約6列的10,000行,但是在60,000處出錯。不要誤解我的錯誤10,000是真棒,並且會很充足 - 但我喜歡強調測試我的應用程序。編輯 - 我不在乎速度在這種情況下 – Chris 2012-03-16 03:34:39
編輯2 - 我在apache/linux服務器上運行(所以贏得緩存已經結束) – Chris 2012-03-16 03:45:45
所有當前的產品發佈緩存方法至少保留一個單元映射「在內存中「,所以(比如)DiskISAM和phpTemp一樣在文件」內存「中保存單元格引用的大小和位置。生產代碼中最具內存效率的緩存機制是memcache,APC和WinCache,其中map僅僅是一個簡單的「cell exists」布爾值。最新的SVN代碼(在預發佈測試中)增加了SQLite作爲緩存選項,它更加高效地存儲內存(根本沒有「內存」映射,一切都在SQLite內部) – 2012-03-16 07:29:52