tp文件上传、表格转数组
tp3和tp5,两个版本的读取表格文件是一样的:
import("Org.Util.PHPExcel"); import("Org.Util.PHPExcel.IOFactory"); //获取文件类型 $file_path是文件的路径 $inputFileType = \PHPExcel_IOFactory::identify($file_path); //根据类型调用不同的读取方法 if ($inputFileType == 'CSV') { $objReader = \PHPExcel_IOFactory::createReader('CSV'); $objPHPExcel = $objReader->setInputEncoding('GBK')->load($file_path); } else { $objReader = \PHPExcel_IOFactory::createReader($inputFileType); $objPHPExcel = $objReader->load($file_path, $encode = 'utf-8'); } $sheet = $objPHPExcel->getSheet(0); //取得总行数 $highestRow = $sheet->getHighestRow(); //取得总列数 $highestColumn = $sheet->getHighestColumn(); //视情况限制 if($highestRow>101) { returnAjax([],101,'不能超过100条'); } //自定义的数组下标 $field = ['id','sex','name','phone']; //设置取出的表格列 $cellName = array('A', 'B', 'C', 'D'); //此处跳过了表头 for ($i = 2; $i < $highestRow + 1; $i++) { $arr = []; foreach ($cellName as $key => $value) { //读取到数组中,此处对应上面的自定义数组下标 $arr[$field[$key]] = $objPHPExcel->getActiveSheet()->getCell($value . $i)->getValue(); //未定义则从0开始 //$arr[$key] = $objPHPExcel->getActiveSheet()->getCell($value . $i)->getValue(); } if(!empty($arr)){ $data[] = $arr; } } return $data;
上传文件:
tp3:https://www.kancloud.cn/manual/thinkphp/1876
示例:
//实例化上传类 upload类默认获取$_FILES $upload = new \Think\Upload(); //设置附件上传大小 $upload->maxSize = 3145728 ; //设置附件上传类型 $upload->exts = array('xls'); //设置附件上传根目录 $upload->rootPath = './upload/'; //设置附件上传(子)目录 $upload->savePath = 'date/'; //上传文件 $info = $upload->upload(); //获取路径 $file_path = $upload->rootPath.$info['file']['savepath'].$info['file']['savename'];
tp5:https://www.kancloud.cn/manual/thinkphp5/155159
示例:
$file = request()->file('file'); $info = $file->rule('date')->move('./upload'); // 后缀 echo $info->getExtension(); // 路径 echo $info->getSaveName(); // 文件名 echo $info->getFilename(); $file_path = './upload/'.$info->getSaveName();
上传文件建议去看官方文档,读取文档的注意事项:
iconv('gb2312', 'utf-8', $val) 解析中文乱码
按照上面的读取方式,以上九种情况中,csv格式转xlsx格式读取会报错,其他都没问题。
如果对你有帮助,希望可以点下推荐。