php基于Fleaphp框架实现cvs数据导入MySQL的方法
本文实例讲述了php基于Fleaphp框架实现cvs数据导入MySQL的方法。分享给大家供大家参考,具体如下:
<?php
/*
*Tochangethistemplate,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
classController_KaoqinUploadextendsFLEA_Controller_Action{
var$uploaddir="./uploadfiles/";
publicfunction_construct(){
parent::__construct();
}
//$patch="http://localhost/uploadfiles";/
functionactionIndex(){
$smarty=&$this->_getView();
$smarty->display("kaoqin_upload.html");
}
//显示错误
privatefunctionshowErro(){
error_reporting(E_ALL);
ini_set("display_errors","On");
}
//判断日期
privatefunctionisDate($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)
returnture;
else
returnfalse;
}
publicfunctionactionSave(){
//$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)
{
case0:
Echo"考勤数据更新成功"."<br>";break;
case1:
Echo"上传的文件超过了php.ini中upload_max_filesize选项限制的值."."<br>";break;
case2:
Echo"上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值。"."<br>";break;
case3:
Echo"文件只有部分被上传"."<br>";break;
case4:
Echo"没有文件被上传"."<br>";break;
case6:
Echo"找不到临时文件夹"."<br>";break;
case7:
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程序设计有所帮助。