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


Posted in PHP onFebruary 23, 2016

本文实例讲述了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如何透过ODBC来存取数据库
Oct 09 PHP
如何提高MYSQL数据库的查询统计速度 select 索引应用
Apr 11 PHP
php环境下利用session防止页面重复刷新的具体实现
Jan 09 PHP
php实现telnet功能示例
Apr 08 PHP
apache中为php 设置虚拟目录
Dec 17 PHP
php使用unset()删除数组中某个单元(键)的方法
Feb 17 PHP
php计算两个日期相差天数的方法
Mar 14 PHP
PHP创建/删除/复制文件夹、文件
May 03 PHP
浅谈PHP中的数据传输CURL
Sep 06 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
Dec 23 PHP
PHP中命名空间的使用例子
Mar 22 PHP
phpstudy隐藏index.php的方法
Sep 21 PHP
PHP编写RESTful接口
Feb 23 #PHP
PHP实现查询两个数组中不同元素的方法
Feb 23 #PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
Feb 23 #PHP
php读取txt文件并将数据插入到数据库
Feb 23 #PHP
PHP调试的强悍利器之PHPDBG
Feb 22 #PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
Feb 22 #PHP
PHP实现linux命令tail -f
Feb 22 #PHP
You might like
smarty模板嵌套之include与fetch性能测试
2010/12/05 PHP
php面向对象值单例模式
2016/05/03 PHP
jquery 模板的应用示例
2013/11/12 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
2013/12/12 Javascript
js数组操作常用方法
2014/05/08 Javascript
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
2014/05/20 Javascript
使用控制台破解百小度一个月只准改一次名字
2015/08/13 Javascript
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
jQuery实现布局高宽自适应的简单实例
2016/05/28 Javascript
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
分享一个原生的JavaScript拖动方法
2016/09/25 Javascript
javascript防篡改对象实例详解
2017/04/10 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
JavaScript实现的原生态Tab标签页功能【兼容IE6】
2017/09/18 Javascript
vue mint-ui学习笔记之picker的使用
2017/10/11 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
详解webpack-dev-server使用方法
2018/09/14 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
2019/06/03 Javascript
JavaScript 扩展运算符用法实例小结【基于ES6】
2019/06/17 Javascript
Vue封装的组件全局注册并引用
2019/07/24 Javascript
基于JavaScript实现表格隔行换色
2020/05/08 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
2020/07/18 Javascript
Vue实现简单的留言板
2020/10/23 Javascript
Python入门_浅谈逻辑判断与运算符
2017/05/16 Python
为什么Python中没有&quot;a++&quot;这种写法
2018/11/27 Python
树莓派动作捕捉抓拍存储图像脚本
2019/06/22 Python
Python3变量与基本数据类型用法实例分析
2020/02/14 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
2021/02/27 Python
英国最大的体育&时尚零售公司:JD Sports
2017/12/13 全球购物
Bibloo奥地利:购买女装、男装、童装、鞋和配件
2018/10/18 全球购物
医学院四年学习生活的自我评价
2013/11/06 职场文书
三年级音乐教学反思
2014/01/28 职场文书
难忘的一天教学反思
2014/04/30 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
2016年五一国际劳动节活动总结
2016/04/06 职场文书
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python