php 導出CSV抽象類,根據總記錄數與每批次記錄數,計算總批次,循環導出。避免內存不足的問題。
ExportCSV.class.php
<?php /** php Export CSV abstract class,根據總記錄數與每批次記錄數,計算總批次,循環導出。 * Date: 2014-05-16 * Author: fdipzone * Ver: 1.0 * * Func: * public setPageSize 設置每批次導出的記錄條數 * public setExportName 設置導出的文件名 * public setSeparator 設置分隔符 * public setDelimiter 設置定界符 * public export 執行導出 * private getPageCount 計算導出總批次 * private setHeader 設置導出文件header * private formatCSV 將數據格式化為csv格式 * private escape 轉義字符串 * abstract getExportTotal 獲取總記錄條數,抽象方法,需繼承類實現 * abstract getExportFields 獲取導出的列名,抽象方法,需繼承類實現 * abstract getExportData 獲取每頁記錄,抽象方法,需繼承類實現 */ abstract class ExportCSV{ // class start // 定義子類必須要實現的方法 /** 獲取總記錄條數 * @return int */ abstract protected function getExportTotal(); /** 獲取導出的列名 * @return Array */ abstract protected function getExportFields(); /** 獲取每批次數據 * @param int $offset 偏移量 * @param int $limit 獲取的記錄條數 * @return Array */ abstract protected function getExportData($offset, $limit); // 定義類屬性 protected $total = 0; // 總記錄數 protected $pagesize = 500; // 每批次導出的記錄數 protected $exportName = 'export.csv'; // 導出的文件名 protected $separator = ','; // 設置分隔符 protected $delimiter = '"'; // 設置定界符 /** 設置每次導出的記錄條數 * @param int $pagesize 每次導出的記錄條數 */ public function setPageSize($pagesize=0){ if(is_numeric($pagesize) && $pagesize>0){ $this->pagesize = $pagesize; } } /** 設置導出的文件名 * @param String $filename 導出的文件名 */ public function setExportName($filename){ if($filename!=''){ $this->exportName = $filename; } } /** 設置分隔符 * @param String $separator 分隔符 */ public function setSeparator($separator){ if($separator!=''){ $this->separator = $separator; } } /** 設置定界符 * @param String $delimiter 定界符 */ public function setDelimiter($delimiter){ if($delimiter!=''){ $this->delimiter = $delimiter; } } /** 導出csv */ public function export(){ // 獲取總記錄數 $this->total = $this->getExportTotal(); // 沒有記錄 if(!$this->total){ return false; } // 計算導出總批次 $pagecount = $this->getPageCount(); // 獲取導出的列名 $fields = $this->getExportFields(); // 設置導出文件header // 查看本欄目