/**
* csv 批量导出
* @param $mpid
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public function export($mpid)
{
$wechat_mp_model = new WechatMp();
$limit = 50000;//每次只从数据库取50000条以防变量缓存太大
// buffer计数器
$cnt = 0;
$where['mpid'] = $mpid;
$mpName = $wechat_mp_model->getCustomField($where, 'mpname');
$start_time = $this->request->param('start_time', '');
$end_time = $this->request->param('end_time', '');
$args['start_time'] = $start_time;
$args['end_time'] = $end_time;
$xlsTitle = ['关注时间', '微信Openid', '微信昵称', '微信头像', '性别'];
set_time_limit(0);
$sqlCount = $this->get_fans_list($mpid, 0, $limit, $args, true);
$fileName = iconv('utf-8', 'gb2312', $mpName);//文件名称
$fileName = $fileName . date('_YmdHis');// 文件名称可根据自己情况设定
// 输出Excel文件头,可把user.csv换成你要的文件名
header('Content-Type: application/vnd.ms-excel;charset=utf-8');
header('Content-Disposition: attachment;filename="' . $fileName . '"');
header('Cache-Control: max-age=0');
$fileNameArr = array();
// 逐行取出数据,不浪费内存
for ($i = 0; $i < ceil($sqlCount / $limit); $i++) {
$fp = fopen($fileName . '_' . $i . '.csv', 'w'); //生成临时文件
// chmod('attack_ip_info_' . $i . '.csv',777);//修改可执行权限
$fileNameArr[] = $fileName . '_' . $i . '.csv'; // 将数据通过fputcsv写到文件句柄
fputcsv($fp, $xlsTitle);
$start = $i * $limit;
$dataArr = $this->get_fans_list($mpid, $start, $limit, $args);
foreach ($dataArr as $a) {
$cnt++;
if ($limit == $cnt) {
//刷新一下输出buffer,防止由于数据过多造成问题
ob_flush();
flush();
$cnt = 0;
}
fputcsv($fp, $a);
}
fclose($fp); //每生成一个文件关闭
}
//进行多个文件压缩
$zip = new \ZipArchive();
$filename = $fileName . ".zip";
$zip->open($filename, $zip::CREATE); //打开压缩包
foreach ($fileNameArr as $file) {
$zip->addFile($file, basename($file)); //向压缩包中添加文件
}
$zip->close(); //关闭压缩包
foreach ($fileNameArr as $file) {
unlink($file); //删除csv临时文件
}
$this->insertLog($this->admin_id, '', '导出公众号粉丝');
//输出压缩文件提供下载
header("Cache-Control: max-age=0");
header("Content-Description: File Transfer");
header('Content-disposition: attachment; filename=' . basename($filename)); // 文件名
header("Content-Type: application/zip"); // zip格式的
header("Content-Transfer-Encoding: binary"); //
header('Content-Length: ' . filesize($filename)); //
@readfile($filename);//输出文件;
unlink($filename); //删除压缩包临时文件
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)