好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php上传cvs文件完整例子 - php上传下载

php上传cvs文件完整例子

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

html代码:

<form action= "/message/index/csv"  encType= "multipart/form-data"  method= "post"  target= "uploadcvs" >  <div><input type= "file"  name= "csvfile" /> &nbsp;<input type= "submit"  value= "上传" ></div>  <div id= "upload_info"  style= "width:100%;border:1px solid #809db9;display:none"  ></div>  </form> 

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 ?  ' <a href="<?php echo UPLOAD_IMAGE_PATH;?>' +data.url.error+ '">查看失败列表</a>'  :  '' ;            //成功的条数,失败的条数            $( '#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文件代码如下:

<?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 ));      }  } 

查看更多关于php上传cvs文件完整例子 - php上传下载的详细内容...

  阅读:74次