php csv导出
/**
* 下载csv
* @param unknown $orders_id
* @param unknown $orders_date_start
* @param unknown $orders_date_end
*/
public function csvDown($orders_id,$orders_date_start,$orders_date_end,$title='ordersSales'){
// 输出Excel文件头,可把user.csv换成你要的文件名
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$title.'.csv"');
header('Cache-Control: max-age=0');
// 打开PHP文件句柄,php://output 表示直接输出到浏览器
$fp = fopen('php://output', 'a');
//在服务器生成一个文件
/* $title = $title . ".csv";
$filePath = APP_PATH.'/Runtime/Temp/'.$title;
$fp = fopen($filePath, 'a'); */
// 输出Excel列名信息
$head = array('12','34','平台','店铺','下单日期','客户ID','销售额','成本','运费(含处理费)','手续费&成交费','利润','利润率');
foreach ($head as $i => $v) {
// CSV的Excel支持GBK编码,一定要转换,否则乱码
$head[$i] = iconv('utf-8', 'gbk', $v);
}
// 将数据通过fputcsv写到文件句柄
fputcsv($fp, $head);
// 下載內容
$saleForms = new \Erp\C\Orders\SaleForms();
// 获取订单总数
$total = $saleForms->getOrdersSaleTotal($orders_id,$orders_date_start,$orders_date_end);
$num = 5000;
$count = ceil($total / $num);
// 计数器
$cnt = 0;
// 每隔$limit行,刷新一下输出buffer,不要太大,也不要太小
$limit = 5000;
for ($i=1; $i <= $count; $i++){
$start = ($i-1) * $num;
$returnInfo = $saleForms->ordersSaleRun($orders_id,$orders_date_start,$orders_date_end,$start,$num);
foreach ($returnInfo['items'] as $row) {
$cnt ++;
if ($limit == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题
ob_flush();
flush();
$cnt = 0;
}
// CSV的Excel支持GBK编码,一定要转换,否则乱码
$temp = array();
foreach ($row as $v){
$temp[] = iconv('utf-8', 'gbk', $v);
}
fputcsv($fp, $temp);
unset($temp);
}
};
fclose($fp);
}
如果数据非常大
可以改变运行内存和php请求运行时间来解决