php文件导出的几种方式
最近需要大数据导出,于是在网上找了一下,在这进行一下整理,希望可以帮助到大家。一、PHP 自带函数 fputcsv 可以实现打印报表(Excel)功能优点是:1 执行效率高2 不需要第三方库3 用起来很方便4 实时生成。用流的形式传输缺点是:1 在 Linux 执行后,下载到本地打开会乱码 那么可以用 iconv 函数进行转换2 只支持csv格式,如果你的对报表格式要求不是很高...
·
最近需要大数据导出,于是在网上找了一下,在这进行一下整理,希望可以帮助到大家。
一、PHP 自带函数 fputcsv 可以实现打印报表(Excel)功能
优点是:
1 执行效率高
2 不需要第三方库
3 用起来很方便
4 实时生成。用流的形式传输
缺点是:
1 在 Linux 执行后,下载到本地打开会乱码 那么可以用 iconv 函数进行转换
2 只支持csv格式,如果你的对报表格式要求不是很高,那么 fputcsv 是很好的选择
代码
public function doub_order_export()
{
set_time_limit(0);
ini_set('memory_limit', '1024M');
// $columns = [
// '列名1', '列名2', '列名3' //需要几列,定义好列名
// ];
$columns = array('订单编号', '课程编号', '课程名称', '订单金额', '支付金额', '支付类型', '手续费', '补贴金额', '下单时间', '支付时间', '机构编号', '机构名称', '信息延迟');
//设置好告诉浏览器要下载excel文件的headers
header('Content-Description: File Transfer');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="导出数据-'.date('Y-m-d', time()).'.xls"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
$fp = fopen('php://output', 'a');//打开output流
mb_convert_variables('GBK', 'UTF-8', $columns);
fputcsv($fp, $columns);//将数据格式化为CSV格式并写入到output流中
$query = M("order")->join("left join doub_goods_extra on doub_order.goods_extra_id = doub_goods_extra.goods_extra_id")
->where(["order_status"=>["in","2,3"]])->field("order_id,goods_id,doub_order.goods_name,doub_order.order_price_new,doub_order.order_price_pay,
doub_order.bank_card_type,doub_order.order_poundage_w,doub_order.poundage_num,order_c_time,order_pay_time,vendor_id,vendor_name,
order_abnorma_status");
// exit($query);
//添加查询条件,获取需要的数据
//$query = Model::class()->where();
//获取总数,分页循环处理
$accessNum = M("order")->where(["order_status"=>["in","2,3"]])->count();
$perSize = 1000;
$pages = ceil($accessNum / $perSize);
for($i = 1; $i <= $pages; $i++) {
//$db_data = $query->limit($perSize)->offset(($i-1)*$perSize)->get();
$db_data = M("order")->join("left join doub_goods_extra on doub_order.goods_extra_id = doub_goods_extra.goods_extra_id")
->where(["order_status"=>["in","2,3"]])->field("order_id,goods_id,doub_order.goods_name,doub_order.order_price_new,doub_order.order_price_pay,
doub_order.bank_card_type,doub_order.order_poundage_w,doub_order.poundage_num,order_c_time,order_pay_time,vendor_id,vendor_name,
order_abnorma_status")->limit(($i-1)*$perSize,$perSize)->order('order_id desc')->select();
//ßßecho M("order")->_sql();
foreach($db_data as $key => $value) {
$rowData =$value;
//var_dump($value);exit;
//获取每列数据,转换处理成需要导出的数据
//需要格式转换,否则会乱码
mb_convert_variables('GBK', 'UTF-8', $rowData);
fputcsv($fp, $rowData);
}
//释放变量的内存
unset($db_data);
//刷新输出缓冲到浏览器
ob_flush();
//必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。
flush();
}
fclose($fp);
exit();
}
二、PHP PHPExcel 包进行导入导出,这个比较普遍。就不多写了,附上几个网址。
更多推荐
已为社区贡献1条内容
所有评论(0)