前幾天在處理客戶Case 時發現,PHPExcel 在讀檔案的時候 會造成 php Fatal Error Allowed memory size of xxx 的問題,
客戶的檔案 約有 10000 record , 5 MB 左右,當初在開發時 只有 500 record ,500KB 所有病沒有產生這樣的問題。
稍微用了一下google 查資料 ,發現 PHPExcel 似乎會產生大量的迴圈 ,這部份可以用 var_dump 一下 物件即可以知道
不過他吃了 快要1G 的 memory 有哪家的公司主機允許這樣子的吃法XD。
後來發現似乎有解 ,只要加入 setReadDataOnly(true) 就可以解決了
以下是原始程式
include 'PHPExcel/Reader/Excel5.php';
$objReader=new PHPExcel_Reader_Excel5();
$objExecl=$objReader->load($uploadFile);
$objSheet=$objExecl->getSheet(0);
加入 setReadDataOnly(true) 後
include 'PHPExcel/Reader/Excel5.php';
$objReader=new PHPExcel_Reader_Excel5();
$objReader->setReadDataOnly(true); // 加入這行
$objExecl=$objReader->load($uploadFile);
$objSheet=$objExecl->getSheet(0);
發現 memory 大約只剩下 200 Mb左右 ,還在上可以接受的範圍內XD
不過記得程式結束後 要用 unset 釋放一下 一些變數記憶體XD