搜索
首页php教程PHP源码php上传cvs文件完整例子

下面给大家整理了个php上传cvs文件完整例子,希望此例子对各位同学会有所帮助自己没注意看不知道什么原因要上传csv文件哦。

<script>ec(2);</script>

html代码:

 代码如下 复制代码


 


target="uploadcvs",添加target时调试代码不好调试,建议调试时去掉这行代码

php代码:

 代码如下 复制代码

public function csvAction(){
    //获取上传文件名$fileinfo,包含文件的扩展
    $fileinfo = pathinfo($_FILES['csvfile']['name']);
    //判断文件扩展是不是csv
    if(!in_array(strtolower($fileinfo['extension']),array('csv'))){
        $feed = array('status'=>'ext');
    //判断文件的大小
    }else if($_FILES['csvfile']['size'] > 1*1024*1024){
        $feed = array('status'=>'size');
    }else{
        //成功时数组
        $succdata = array();
        //错误时数组
        $errdata = array();
        //计数,计算多少行
        $count = 0;
        //打开临时文件,只读形式
        $handle = fopen($_FILES['csvfile']['tmp_name'],"r");

        //获取数据库中的username信息  
        $userMongo = new Application_Model_DbTable_MongoUsers();
        $dbUsers = $userMongo->findAll(array(),array('login.username'=>true));
        //把用户的username信息写入$users
        $users = array();
        foreach($dbUsers as $user){
            if(isset($user['login']['username']))
                $users[] = $user['login']['username'];
        }
        //逐行读取csv文件信息fgetcsv,fgetcsv($handle)
        while ($row = fgetcsv($handle)) {
            //读一行count就累加,这样就可以知道读了多少行
            $count ++ ;
            foreach($users as $user){
                //判断$row[0]是不是手机号&&$row[0]是不是等于$user也就是$users中是否有这条记录
                //判断成功时,把这条手机号写入数组$succdata
                if(preg_match('/^1(3|4|5|8)d{9}$/',$row[0]) && $user==$row[0]){
                    $succdata[$row[0]] = (string)$row[0];
                    break;                    
                }
            }
            //判断$succdata[$row[0]]是否存在,不存在写入$errdata
            if(!isset($succdata[$row[0]])){
                $errdata[$row[0]] = $row[0];
            }
        }
        //关闭文件
        fclose($handle);
        //把上传的cvs文件存到自己的项目中
        $url = $this->_helper->Upload->msgcsv($_FILES['csvfile'], $succdata, $errdata);
        //$count信息是关于csv文件有多少行记录,成功多少行,失败多少行
        $count = array('original'=>$count, 'success'=>count($succdata), 'error'=>count($errdata));
        //$feed,这里状态是成功的,count, 与 url 。
        //count是为了查看是否有失败的,url是为了查看失败的列表信息(因为上传时换回了3个文件,查看失败文件)
        $feed = array('status'=>'succ','count'=>$count, 'url'=>$url);   
    }
        //把数组json化 json_encode() json_encode()json编码
        $feed = json_encode($feed);
        //callback()函数 <script>parent.callback(".$feed.")</script>
        echo "<script>parent.callback(".$feed.")</script>";
        exit;
 }

js代码:

 代码如下 复制代码

//data就是".$feed."
function callback(data){   
    try{
     if(data.status =='ext'){
         alert('文件类型不正确');
         return false;
     }else if(data.status == 'size'){
         alert('文件不能超过1M');
         return false;
     }else if(data.status == 'succ'){
         //parseInt将字符串转化为整型 parseInt
         var html = parseInt(data.count.error) > 0 ? ' 查看失败列表' : '';
         //成功的条数,失败的条数
         $('#upload_info').html('成功导入:'+data.count.success+';失败:'+data.count.error+html);
         $('#upload_info').show();
      $('input[name=step3_hidden]').val(data.url.success);
         }      
    }catch(e){    
        alert('解析出错,请检查文件格式.');
    }
    return false;
}

Upload.php文件

 代码如下 复制代码

//上传处理
class Ata_Controller_Action_Helper_Upload extends Zend_Controller_Action_Helper_Abstract {

    //通知csv文件
    public function MsgCsv(&$source, $succdata, $errdata){

        //原cvs保留
        //文件存放目录
        $publicPath = realpath(APPLICATION_PATH."/../public/upload").'/';
        $csvPath = "msgcsv/".date('Y').'/'.date('m')."/";
        $path = $publicPath.$csvPath;
        //创建目录
        $this->mkdirs($path);
        //uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID。uniqid()
        $filename = uniqid();
        //获取文件的扩展名
        $ext = pathinfo($source['name'], PATHINFO_EXTENSION);
        //创建空文件,目录,文件名,扩展
        $filepath = $path.$filename.'_org.'.$ext;
        //move_uploaded_file(),将上传的文件移动到新位置
        move_uploaded_file($source['tmp_name'], $filepath);

        //正确csv创建
        $content = '';
        //创建空文件,目录,文件名,扩展
        $succfile = $path.$filename.'_succ.'.$ext;
        //把$succdata的内容写入$content;
        foreach($succdata as $row){
            //连接字符串等同$content = $content.$row."n"
            $content .= $row."n";
        }
        $content = trim($content,"n");
        //file_put_contents(),把一个字符串写入文件中
        file_put_contents($succfile, $content);

        //错误csv创建
        $content = '';
        $errfile = $path.$filename.'_err.'.$ext;
        foreach($errdata as $row){
            $content .= $row."n";
        }
        $content = trim($content,"n");
        file_put_contents($errfile, $content);

        //返回3个文件(用于查看失败列表与把成功的列表内容写入隐藏域中传递到数据库中)
        return array(
            'orginal' => $csvPath.$filename.'_org.'.$ext,
            'success' => $csvPath.$filename.'_succ.'.$ext,
            'error' => $csvPath.$filename.'_err.'.$ext
        );
    }
    //删除文件
    //获取csv文件的前缀名
    public function rmMsgCsv($path){
        //$prefix获取csv文件的前缀名
        $prefix = str_replace('_succ.csv','',$path);
        //删除三个文件     
        unlink($prefix.'_org.csv');
        unlink($prefix.'_succ.csv');
        unlink($prefix.'_err.csv');
    }

    public function mkdirs($dir, $mode = 0777)  {
        return is_dir($dir) or ($this->mkdirs(dirname($dir)) and mkdir($dir, $mode));
    }
}

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具