php基于Fleaphp框架实现cvs数据导入MySQL的方法

5年以前  |  阅读数:328 次  |  编程语言:PHP 

本文实例讲述了php基于Fleaphp框架实现cvs数据导入MySQL的方法。分享给大家供大家参考,具体如下:


    <?php
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    class Controller_KaoqinUpload extends FLEA_Controller_Action {
     var $uploaddir = "./uploadfiles/";
     public function _construct(){
      parent::__construct();
     }
    // $patch="http://localhost/uploadfiles";/
     function actionIndex() {
      $smarty =& $this->_getView();
      $smarty->display("kaoqin_upload.html");
     }
     //显示错误
     private function showErro(){
     error_reporting(E_ALL);
      ini_set("display_errors","On");
     }
     //判断日期
     private function isDate($file_name)
     {
      $filename = explode('.',$file_name);
     $real_name = $filename[count($filename)-2];//得到文件名
      $format="Y-m-d";//时间格式类型
      $unixTime=strtotime($real_name);
      $checkDate= date($format,$unixTime);
       if($real_name==$checkDate)
        return ture;
       else
        return false;
     }
     public function actionSave(){
    // $this->showErro();
     $upload_file=$_FILES['upload_file'];
     $file_name = $_FILES['upload_file']['name'];
     $file_tmp_name = $_FILES['upload_file']['tmp_name'];
     $file_type = $_FILES['upload_file']['type'];
     $file_size = $_FILES['upload_file']['size'];
     $file_error = $_FILES['upload_file']['error'];
      //检查文件
      if ($file_name==null)
       {
        echo "文件选择出错,请检查上传文件。";
        exit;
       }
      //判断文件大小
      if ($file_size >=10241024 )
       {
        $file_size = round($file_size/ 1048576 * 100) / 100 . ' mb';
        print_r("上传的文件大小为"."$file_size");
      echo "系统只允许上传大小为10M以内的文件。";
      exit;
       }
      //$extention_name = end(explode('.',$_FILES["upload_file"]['name']));//获取扩展名
      $extention_name=preg_replace('/.*/.(.*[^/.].*)*/iU','//1',$file_name);//获得文件的扩展名
      //检查文件类型
      if($file_type!="application/vnd.ms-excel"&& $extention_name!="csv")
       {
      echo "您上传的文件类型: .",$extention_name,"<br>";
      print_r("系统允许文件类型: .csv");
      exit;
       }
      if(file_exists($this->uploaddir.$_FILES['upload_file']['name']))
      {
        print("备份目录同名数据存在"); //文件存在
        exit;
      }
      if($this->isDate($file_name)==FALSE)
      {
        print("文件命名格式不对,正确格式。例:2010-10-28.csv");   //文件存在
        exit;
      }
      // var_dump(file_exists($this->uploaddir.$_FILES['upload_file']['name'])); //test返回
      print_r("原始考勤数据文件:".$_FILES['upload_file']['name']."<br>"."<br>");
      //数据导入
    //  $fp = fopen($_FILES['upload_file']['tmp_name'], "r");
    //  $data = fgets($fp, 1000);
    //  $date=setOutputEncoding('utf-8');
      $data=file($_FILES['upload_file']['tmp_name']);
     $attendance =& get_singleton('Model_attendance');
      //print_r($data);
      //数据导入处理
      for($i=1;$i<count($data)-1;$i++) {
       $a=explode(";",$data[$i]);
       //编码格式转换
       $a[0]=iconv("gb2312", "utf-8", $a[0]);
       $a[1]=iconv("gb2312", "utf-8", $a[1]);
       $a[2]=iconv("gb2312", "utf-8", $a[2]);
       $a[4]=iconv("gb2312", "utf-8", $a[4]);
       $a[5]=iconv("gb2312", "utf-8", $a[5]);
       // print_r($a);
       $t=array();
       $t["ATTENDANCE_FINGERPRINT_ID"]=intval(trim($a[0],"/""));
       $t["ATTENDANCE_USER_NAME"]=trim($a[1],"/"");
       $t["ATTENDANCE_DATE"]=trim($a[2],"/"");
       // $t["ATTENDANCE_DIVISIONS"]=trim($a[3],"/"");//表中字段ATTENDANCE_DIVISIONS在表中删除
       $t["ATTENDANCE_GO_WORK"]=trim($a[4],"/"");
       $t["ATTENDANCE_AFTER_WORK"]=trim($a[5],"/"");
       //判断打卡情况
       $go_work = trim($a[4],"/"");//上班时间
       $after_work = trim($a[5],"/"");//下班时间
     //   print_r(var_dump($go_work));
       // exit();
       if(strlen($go_work)==0 && strlen($after_work)!=0)
        {
         $t["ATTENDANCE_STATUS"]= "1"; //"1"代表正常出勤
        }
       if(strlen($go_work)!=0 && strlen($after_work)==0)
        {
          $t["ATTENDANCE_STATUS"] ="2"; //"2"代表上班为打卡
        }
       if(strlen($go_work)!=0 && strlen($after_work)!=0)
        {
         $t["ATTENDANCE_STATUS"] ="3"; //"3"代表下班未打
        }
       if(strlen($go_work)==0 && strlen($after_work)==0)
        {
         $t["ATTENDANCE_STATUS"]= "4"; //"4"代表未出勤
        }
       //按考勤规则重置正常上下班时间
        if(strlen($go_work) == 0 && strlen($after_work) == 0)
       {
        $go_work = "24:00";
        $after_work = "00:00";//未出勤按子时计算
       }
       if(strlen($go_work) == 0 && strlen($after_work)!=0)
       {
        $t["ATTENDANCE_GO_WORK"] = $go_work = "08:35";//上班未打卡按08:35开始计算
       }
       if(strlen($go_work) != 0 && strlen($after_work) == 0)
       {
        $t["ATTENDANCE_AFTER_WORK"] = $after_work = "17:30"; //下班为打卡按17:30计算
       }
       //计算在勤时间
       $minutes;//保存分钟段
       $hours;//保存小时段
       $real_time1 = explode(":",$go_work);//上班时间分割数组
       $real_time2 = explode(":",$after_work);//下班时间分割数组
       //开始处理在勤时间
       $minutes=intval(intval($real_time2[1])-intval($real_time1[1]));
        if($minutes<0)
         {
         $hours=intval(intval(($real_time2[0])-1)-intval($real_time1[0]));
         if($hours<=0)
         {
          $hours=intval((intval($real_time2[0])-1)-intval($real_time1[0])+24);
          }
         $minutes=intval(intval($real_time2[1])+60-intval($real_time1[1]));
         $attendance_time = sprintf("%02d", $hours).":".sprintf("%02d", $minutes);
         }
        else
         {
         $hours =intval(intval($real_time2[0])-intval($real_time1[0]));
         if($hours<=0)
         {
          $hours = intval(intval($real_time2[0])-intval($real_time1[0])+24);
         }
         if($minutes>=10 && $minutes<60) //开始选用strlen判断字符长度补齐位,现在直接用格式化输出,原结构不变。
         {$attendance_time = sprintf("%02d", $hours).":".sprintf("%02d", $minutes);}
         else
         {
          $attendance_time = sprintf("%02d", $hours).":".sprintf("%02d", $minutes);
         }
         }
        // 更正未出勤时间情况,去除午休时间的在勤时间
        if($attendance_time=="-1:00")
        {
         $attendance_time="00:00";
        }
       $t["ATTENDANCE_TIME"]=$attendance_time;//保存在勤时间
       $attendance->create($t);//存入数据库
      }
    //  print_r("数据导入成功")."<br>";
      //原始csv文件数据备份,文件保存在系统的./uploadfiles/文件夹下
      switch ($file_error)
      {
      case 0:
       Echo "考勤数据更新成功"."<br>"; break;
      case 1:
       Echo "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值."."<br>"; break;
      case 2:
       Echo "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。"."<br>"; break;
      case 3:
       Echo "文件只有部分被上传"."<br>";break;
      case 4:
       Echo "没有文件被上传"."<br>";break;
      case 6:
       Echo "找不到临时文件夹"."<br>";break;
      case 7:
       Echo "文件写入失败"."<br>";break;
      }
      echo "<br>";
    //  exit();
    //  $absolutdir=$_SERVER[DOCUMENT_ROOT ].$uploaddir.$file_name;
      if ($_FILES["upload_file"]['error']==0)
      { //echo $file_tmp_name;
       //echo $this->uploaddir.$_FILES['upload_file']['name'];
       //$name=time();
       if( move_uploaded_file($file_tmp_name, $this->uploaddir.$_FILES['upload_file']['name']))
        {
        echo '原始数据备份成功';
         }
       else
        {
        echo '备份原始数据失败';
        }
      }
     }
    }
    ?>

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
将二进制数据转为16进制以便显示
获取IMSI
获取IMEI
Java生成UUID
PHP自定义函数获取搜索引擎来源关键字的方法
让你成为最历害的git提交人
在Zeus Web Server中安装PHP语言支持
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php+ajax+json 详解及实例代码
Yii2汉字转拼音类的实例代码
php封装的page分页类完整实例
php数组合并array_merge()函数使用注意事项
PHP设计模式之工厂模式与单例模式
PHP实现简单爬虫的方法
php实现数组中索引关联数据转换成json对象的方法
wget使用技巧