封装成函数:
class Csv{/*** 导出csv文件*/public function export_csv($list, $title){$file_name = "export" . time() . ".csv"; // 文件名header('Content-Type: application/vnd.ms-excel'); // 设置内容类型为Excelheader('Content-Disposition: attachment;filename=' . $file_name); // 下载文件header('Cache-Control: max-age=0'); // 表示当访问此网页后的0秒内再次访问不会去服务器$file = fopen('php://output', "a");// 打开文件或者 URL, php://output 是一个只写的数据流, a:写入方式打开,将文件指针指向文件末尾。$limit = 1000;$num = 0;foreach ($title as $v) {$tle[] = iconv('UTF-8', 'GB2312//IGNORE', $v); // 转码}fputcsv($file, $tle);// 将行格式化为 CSV 并写入一个打开的文件中。(标题)foreach ($list as $v) {$num++;// 清空缓存,将缓存上的数据写入到文件if ($limit == $num) {ob_flush(); // 将本来存在输出缓存中的内容取出来,调用ob_flush()之后缓冲区内容将被丢弃。flush(); // 待输出的内容立即发送。$num = 0;}foreach ($v as $t) {$cArr[] = iconv('UTF-8', 'GB2312//IGNORE', $t);}fputcsv($file, $cArr); // 将行格式化为 CSV 并写入一个打开的文件中。(内容)unset($cArr); // 销毁指定的变量}unset($list); // 销毁指定的变量fclose($file); // 关闭打开的文件exit();}// csv导入public function import_csv($dirName){$csv_file = $handle = fopen($dirName, 'r');//只读方式打开,将文件指针指向文件头]$result = array();$i = 0;// 读入一行并解析 CSV 字段(规定的是读取一行的最大长度)while ($data_line = fgetcsv($csv_file, 1000)) {// 跳过第一行标题读取if ($i == 0) {$GLOBALS ['key_name'] = $data_line; // 将标题存储起来$i++;continue;}// 读取内容foreach ($GLOBALS['key_name'] as $key_num => $key_name) {$key_name = iconv('gb2312', 'utf-8', $key_name); // 标题if (empty($data_line[$key_num])) {$result[$i][$key_name] = '';} else {// 标题对应的内容$value = iconv('gb2312', 'utf-8', $data_line[$key_num]); $result[$i][$key_name] = $value;}}$i++;}fclose($handle); // 关闭指针return $result;}
}
在控制器中的使用:
/*** 大数据改 导出*/
public function exportData(){
// set_time_limit(0);$data = Db::name('table') -> order('create_time desc')-> select();$csv_title = array('编号','名称','手机号','邮件',);$csv = new Csv(); // 实例化后才可以调用之前类文件定义好的方法$csv->put_csv($data, $csv_title);
}/*** 大数据改 导入*/
public function importData(){if (request() -> isPost()){// 获取表单上传文件$file = request()->file('examfile');if(empty($file)) {$this->error('请选择上传文件');}$dirName = "public/uploads/csv";if(!file_exists($dirName)){mkdir(app()->getRootPath().$dirName,0777,true);}$info = $file->move($dirName);//获取文件(日期/文件),$info->getFilename();$filename = $dirName.'/'.$info->getSaveName();
// $handle = fopen($filename,'r');// 只读方式打开,将文件指针指向文件头]$csv = new Csv();$result = $csv->input_csv($filename); // 解析csv$len_result = count($result);//返回数目if($len_result == 0){$this->error('此文件中没有数据!');}dump($result);
// fclose($handle); // 关闭指针return;}return $this -> fetch();
}
后续看看是否有后续