資料量很大時(5萬條以上),用 PHPExcel 匯出 xls 將十分緩慢且佔用很大記憶體,最終造成執行超時或記憶體不足。可以透過設定 PHP 的執行時間和記憶體限制來阻止錯誤發生,但仍然不能確保匯出完成。[php] view plain copyset_time_limit(0); ini_set("memory_limit","512M"); 要徹底解決這個問題可以將資料分批匯出成 CSV 格式的檔案,這種格式簡單匯出快,並且也能用到 Excel 中。[php] view plain copy $v) { // CSV的Excel支援GBK編碼,一定要轉換,否則亂碼 $head[$i] = iconv("utf-8", "gb2312", $v); } // 將資料透過fputcsv寫到檔案控制代碼 fputcsv($fp, $head); // 計數器 $cnt = 0; // 每隔$limit行,重新整理一下輸出buffer,不要太大,也不要太小 $limit = 100000; // 逐行取出資料,不浪費記憶體 while ($row = mysql_fetch_array($stmt,MYSQL_ASSOC)) { $cnt ++; if ($limit == $cnt) { //重新整理一下輸出buffer,防止由於資料過多造成問題 ob_flush(); flush(); $cnt = 0; } foreach ($row as $i => $v) { $row[$i] = iconv("utf-8", "gb2312", $v); } fputcsv($fp, $row); } ?>
資料量很大時(5萬條以上),用 PHPExcel 匯出 xls 將十分緩慢且佔用很大記憶體,最終造成執行超時或記憶體不足。可以透過設定 PHP 的執行時間和記憶體限制來阻止錯誤發生,但仍然不能確保匯出完成。[php] view plain copyset_time_limit(0); ini_set("memory_limit","512M"); 要徹底解決這個問題可以將資料分批匯出成 CSV 格式的檔案,這種格式簡單匯出快,並且也能用到 Excel 中。[php] view plain copy $v) { // CSV的Excel支援GBK編碼,一定要轉換,否則亂碼 $head[$i] = iconv("utf-8", "gb2312", $v); } // 將資料透過fputcsv寫到檔案控制代碼 fputcsv($fp, $head); // 計數器 $cnt = 0; // 每隔$limit行,重新整理一下輸出buffer,不要太大,也不要太小 $limit = 100000; // 逐行取出資料,不浪費記憶體 while ($row = mysql_fetch_array($stmt,MYSQL_ASSOC)) { $cnt ++; if ($limit == $cnt) { //重新整理一下輸出buffer,防止由於資料過多造成問題 ob_flush(); flush(); $cnt = 0; } foreach ($row as $i => $v) { $row[$i] = iconv("utf-8", "gb2312", $v); } fputcsv($fp, $row); } ?>