ThinkPHP中文件上传和去除重复

      1. 上传文件:在上传文件时,可使用TP自带的函数upload直接调用。设置附件上传的大小,类型,根目录,子目录的大小,然后实现上传,并将路径改为相对路径,不是绝对路径。

代码如下:

     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->import($upload->rootPath.$info['file']['savepath'].$info['file']['savename']);
		}

	}

         2.使用import方法,将上传的文件导入数据库中,并生成日志文件。

              第一步:首先将文件读入一个字符串,将一个字符串写入文件,并用fopen打开文件。

              第二步:使用fwrite写入日志文件。(注:写日志文件文件换行使用\r\n)。

             第三步:使用in_array函数判断是否重复,如果重复,则提醒已存在,如果不重复,提醒导入成功。

代码如下:

public function import($file){
        // $file="./Public/Upload/2018-03-21/5ab1b65184cc6.csv";
        $encoding=detect_encoding($file);
        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);
            // exit;

            $arr=array();
            $filename="./Public/Logs/load.txt";
            $fop=fopen($filename,'w');
            while(($row=fgetcsv($fp,1000,","))!==false){//从文件指针中读入一行并解析 CSV 字段 
                // $arr[]=array_combine($fields, $row);//创建一个数组,一个为键,一个为值
                // dump($row);
                // exit;
                $row=array_combine($fields,$row);
                // dump($row);
                // exit;
                $name=$row['name'];
                $row['py']=SpGetPinyin($name);
                // dump($row);
                // exit;
                if(in_array($row['no'], $arrNo)){
                    $data .= $row['no']."已存在\r\n";
                   
                }else{
                    $arr[]=$row;
                    $arrNo[]=$row['no'];
                    $data.= $row['no']."导入成功\r\n";
                   
               }


                if(count($arr)==1000){
                    $model->addAll($arr);
                    unset($arr);//释放给定的变量
                
              } 
          }
                if(count($arr)>0){
                    $model->addAll($arr);
                }
                $this->show('添加成功','utf8');
        }  
            $fwrite=fwrite($fop,$data);
            $file_name = "load.txt";     //下载文件名    
            $file_dir = "./Public/Logs/";        //下载文件存放目录    
            //检查文件是否存在    
            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 );    
                // exit ();    
            }  
            
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值