实测 框架:tp3 环境:mamp搭建本地环境 mackbook pro 时间:8秒
public function excel(){
//让程序一直运行
set_time_limit(0);
//设置程序运行内存
// ini_set('memory_limit', '128M');
ini_set("memory_limit", "-1");
ini_set("max_execution_time", "500");
ignore_user_abort(true);
$fileName = '测试导出数据';
header('Content-Encoding: UTF-8');
header("Content-type:application/vnd.ms-excel;charset=UTF-8");
header('Content-Disposition: attachment;filename="' . $fileName . '.csv"'); //.csv可以修改为.xlsx
//打开php标准输出流
$fp = fopen('php://output', 'a');
//添加BOM头,以UTF8编码导出CSV文件,如果文件头未添加BOM头,打开会出现乱码。
fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF));
//添加导出标题
fputcsv($fp, ['id', '商品编号', '药品名称','药品条码','药品品牌','规格','形态','厂家','是否为处方药','国药准字','拼音']);
$limit = 50000;
$res = M('drugs')->field('id,drugsnum,name,barcode,brand,specs,model_val,company,prescription,chinese_standard,spell')->limit(0,$limit)->order('id asc')->select();
$step = 0;
for($i=0;$i<20;$i++){ //由于数据库数量有限所以 循环两次导出测试数据 增加导出条数
foreach ($res as $k => $v) {
$step = $step + 1;
if ($step == 1000) {
ob_flush();
flush();
$step = 0;
}
$item = [$v['id'], $v['drugsnum'], $v['name'], '`'.$v['barcode'], $v['brand'], $v['specs'], $v['model_val'], $v['company'], $v['prescription'], $v['chinese_standard'], $v['spell']];
fputcsv($fp, $item);
}
}
}
|