1,上传文件
在控制器中传建一个update方法,然后实例化上传类,设置附件上传大小,设置附件上传类型,
设置附件上传根目录,设置附件上传(子)目录,上传文件判断是否上传成功,上传成功则输出信息
“上传成功”,失败则提示错误信息,具体代码如下:
public function upload(){
if(IS_GET){
$this->display();
exit;
}
$upload = new \Think\Upload();//实例化上传类
$upload->maxSize = 0;//设置附件上传大小
$upload->exts = array('csv');//设置附件上传类型
$upload->rootPath = './Public/Upload/';//设置附件上传根目录
$upload->savePath = '';//设置附件上传(子)目录
//上传文件
$info = $upload->upload();
if(!$info){
//上传错误提示错误信息
$this->error($upload->getError());
}else{
//上传成功
// $this->success('上传成功!'.$info['file']['savepath'].$info['file']['savename']);
echo "上传成功<br>";
$this->import($upload->rootPath . $info['file']['savepath'].$info['file']['savename']);
}
}
2.文件上传去重
在update方法下创建一个import方法,检测文件编码(如果不是utf-8格式,则转化为utf-8)
用fopen()打开读取文件,用getField()获取学号,放到一个数组中,再判断数组中是否存在
该学号,存再则输出提示信息“该学号已存在”,不存在则输出提示信息“该学号已导入”。
public function import($file){
//检测文件编码
$encoding = detect_encoding($file);
//如果不是utf-8格式,则转化为utf-8
if($encoding != 'UTF-8'){
$contens = file_get_contents($file);
$contens = mb_convert_encoding($contens,'utf-8',$encoding);
file_put_contents($file,$contens);
}
$fp = fopen($file,'r');
if($fp){
$fields = array('no','name','sex');
$model = M('student');
//去重
$arrNo = $model->getField('no',true);
// dump($arrNo);
$arr = array();
while(($row = fgetcsv($fp,1000,",")) !== false){
$row = array_combine($fields, $row);
// dump($arr);
// exit;
//自动生成拼音
$name = $row['name'];
$row['py'] = SpGetPinyin($name);
if(in_array($row['no'],$arrNo)){
echo $row['no']."该学号已存在\r\n";
}else{
$arrNo[] = $row['no'];
$arr[] = $row;
// dump($row['no']);
// exit;
echo $row['no']."该学号已导入\r\n";
}
if(count($arr) == 1000){
$model->addAll($arr);
unset($arr);
}
}
if(count($arr)>0){
$model->addAll($arr);
}
$this->show('添加成功','utf-8');
}
}
3.信息添加到指定文件
if(in_array($row['no'],$arrNo)){
$current .=$row['no']."该学号已存在\r\n";
file_put_contents($file, $current);//将一个字符串写入文件
}else{
$arrNo[] = $row['no'];
$arr[] = $row;
// dump($row['no']);
// exit;
$file = "./Public/dir/log.txt";
$current1 .=$row['no']."该学号已导入\r\n";
file_put_contents($file, $current1);
}
判断文件是否存在
$file_name = "log.txt";
$file_dir = "./Public/dir/";
if(!file_exists($file_dir.$file_name)){
echo "文件找不到";
exit;
}else{
$file = fopen($file_dir.$file_name, "r");
Header("content-type:application/octet-stream");
Header("Accept-Ranges:bytes");
Header("Accept-Length:".filesize($file_dir.$file_name));
Header("Content-Disposition:attachment;filename=".$file_name);
echo fread($file,filesize($file_dir.$file_name));
fclose($file);
}