phpExcel匯出檔案時記憶體溢位的問題

2022-02-12 14:55:13 字數 2294 閱讀 4009

在使用phpexcel匯出檔案時,經常會因為檔案過大導致php記憶體溢位報錯,為了解決這個問題,可以使用phpexcel提供的引數進行優化。這裡說的excel檔案過大並不一定是檔案大小,更關鍵的在於檔案內存放的資料和格式,如果資料很多,格式又比較豐富,那很容易會將php的記憶體耗盡。

資料2中指出,excel中乙個單元格在不啟用快取的情況下大概占用記憶體是1k,乙個8000行、31列的**(248000個單元格)需要242mb記憶體。如果啟用快取,則會降到80mb,效果還是非常明顯的。

使用中需要注意,phpexcel的記憶體優化引數並不在phpexcel物件中,需要在phpexcel例項化之前設定。

$cachemethod = phpexcel_cachedobjectstoragefactory::cache_to_phptemp;

$cachesettings = array( 'memorycachesize' => '512mb');

phpexcel_settings::setcachestoragemethod($cachemethod,$cachesettings);

$oexcel = new phpexcel();

將單元格資料序列化後儲存在記憶體中
phpexcel_cachedobjectstoragefactory::cache_in_memory_serialized;
將單元格序列化後再進行gzip壓縮,然後儲存在記憶體中
phpexcel_cachedobjectstoragefactory::cache_in_memory_gzip;
快取在臨時的磁碟檔案中,速度可能會慢一些
phpexcel_cachedobjectstoragefactory::cache_to_discisam;
儲存在php://temp
phpexcel_cachedobjectstoragefactory::cache_to_phptemp;
儲存在memcache中
$cachemethod = phpexcel_cachedobjectstoragefactory::cache_to_memcache;  

$cachesettings = array( 'memcacheserver' => 'localhost',

'memcacheport' => 11211,

'cachetime' => 600

);

phpexcel_settings::setcachestoragemethod($cachemethod, $cachesettings);

如果不需要讀取excel單元格格式,可以設定為只讀取資料。

$objreader = phpexcel_iofactory::createreader('excel2007');

$objreader->setreaddataonly(true);

$objphpexcel = $objreader->load("test.xlsx」);

如果excel中有多個sheet,但是我們只需要讀取其中幾個,為了減少記憶體消耗,也可以設定。

$objreader = phpexcel_iofactory::createreader('excel2007');

$objreader->setloadsheetsonly( array("worksheet1", "worksheet2") );

$objphpexcel = $objreader->load("test.xlsx」);

如果只需要讀取sheet中一定區域,也可以設定過濾器。

class myreadfilter implements phpexcel_reader_ireadfilter

return false;

}}$objreader = phpexcel_iofactory::createreader('excel2007');

$objreader->setreadfilter( new myreadfilter() );

$objphpexcel = $objreader->load("test.xlsx」);

參考資料:

1、phpexcel how do i pass settings into class

2、how to fix memory getting exhausted with phpexcel?

3、lowest memory cache method for phpexcel

php Excel匯出檔案

php excel匯出檔案 匯出xls檔案 param array header 第一行 array sku 主sku 商品名稱 成本價 批量生產 銷售狀態 銷售型別 商 採購人 維護人 param array index data 下標 順序匯出 param array data 匯出所需資料 p...

匯入 匯出檔案

1.檔名的正確驗證 如果匯出檔案命名中有中文需詳細關注 2.匯出檔案格式的驗證 如之間的分割符,是否有表頭等,換行是否正確 3.是否在設定的時間生成匯出檔案 4.匯出出錯時系統如何處理 如是否正常傳送報警郵件,郵件的格式和內容是否正確 5.匯出檔案的格式是否正確 如欄位是否正常,分割符,換行是否正確...

Oracle匯出檔案

set echo off 是否顯示指令碼中正在執行的sql語句 set feedback off 是否顯示當前sql語句查詢或修改的行數 set newpage none 設定頁與頁之間的分隔 set pagesize 50000 設定一頁有多少行數 set linesize 20000 設定一行可...