版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a114469/article/details/88797363
生存文件,指定保存目录。
function exportToCsv($fileName = '', $headArr = [], $data = []){
//文件夹
$filedir = ROOT_PATH."public/csv/";
if(!is_dir($filedir)) mkdir($filedir,777,true);
//路径
$fileName .= '.csv';
$filePath = $filedir.$fileName;
//生成csv文件
$fp = fopen($filePath, 'w');
$header = implode(',', $headArr) . PHP_EOL;
$content = '';
foreach($data as $line => $val)
{
$content .= implode(',', $val) . PHP_EOL;
}
$csv = $header.$content;
// 写入数据
fwrite($fp,$csv);
//关闭文件句柄
fclose($fp);
return;
}
header文件头
#生成一个csv,header不能重写
function exportToExcel($fileName = '', $headArr = [], $data = []){
ini_set('memory_limit','1024M'); //设置程序运行的内存
ini_set('max_execution_time',0); //设置程序的执行时间,0为无上限
@ob_end_clean(); //清除内存
ob_start();
@header("Content-Type: text/csv");
@header("Content-Disposition:filename=".$fileName.'.csv');
$fp=fopen('php://output','w');
fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF));
fputcsv($fp,$headArr);
$index = 0;
foreach ($data as $item) {
if($index==1000){ //每次写入1000条数据清除内存
$index=0;
ob_flush();//清除内存
flush();
}
$index++;
fputcsv($fp,$item);
}
@ob_flush();
flush();
ob_end_clean();
return;
}
测试:
$count = db('table')->count();
//csv文件数
$page = ceil($count/1);//1每个文件1条(测试)
$page_arr = range(1,$page);
foreach ($page_arr as $kkk => $vvv) {
$rs[$kkk] = db('table')->field('l1,l2')->page($vvv.', 1000')->select();
$title[$kkk] = ['列1','列2'];
$exl = [];
foreach ($rs[$kkk] as $k => $v){
if (!$v['l1']) $v['l1'] = '暂无数据';
if (!$v['l2']) $v['l2'] = '暂无数据';
$exl[$kkk][] = array(
$v['l1'],$v['l2']
);
}
//$this->exportToExcel('table_'.time().$kkk,$title[$kkk],$exl[$kkk]);
$this->exportToCsv('table_'.time().$kkk,$title[$kkk],$exl[$kkk]);
}