PHP多文件上传类实例
本文实例讲述了PHP多文件上传类。分享给大家供大家参考。具体如下:
<?php
/*
PHP多文件上传类
修改:Linvo2008-2-15
*/
classmore_file_upload{
constFILE_PATH='../upfileclass/uploadfile/';
var$file_type;
var$file_type_array;
var$file_type_real_array;
var$file_type_string;
var$file_name;
var$file_size;
var$file_tmp_name;
var$file_error;
var$handledate;
var$totalsize=0;
function__construct($file_name,$file_error,$file_size,$file_tmp_name,$file_type){
$this->handledate=date('m-d-Y');
if(!empty($file_name)){
$this->$file_name=$file_name;
$this->$file_error=$file_error;
$this->$file_size=$file_size;
$this->$file_tmp_name=$file_tmp_name;
$this->$file_type=$file_type;
$this->$file_type_array=array('/','image/gif','image/jpg','image/jpeg','image/pjpeg','image/png');
$this->$file_type_real_array=array(0.1,'jpg'=>74707370,'gif'=>7173,'bmp'=>6677,'png'=>807871);
$this->show_execute_message($this->$file_error,$this->$file_name,$this->$file_type,$this->$file_size);
}
}
function__destruct(){
$this->$file_name=NULL;
$this->$file_error=NULL;
$this->$file_size=NULL;
$this->$file_tmp_name=NULL;
$this->$file_type=NULL;
$this->$totalsize=0;
}
functionshow_execute_message($smfileerror,$smfilename,$smfiletype,$smfilesize){
if($smfileerror>0){
switch($smfileerror){
case1:$smfilemessage='<strong>文件超过服务器的约定大小!</strong>';break;
case2:$smfilemessage='<strong>文件超过指定的文件大小!</strong>';break;
case3:$smfilemessage='<strong>文件只上传了部分!</strong>';break;
case4:echo"$this->$file_name".'文件上传失败!<br/>';break;
}
self::__destruct();
}else{
$smfiletypeflag=array_search($smfiletype,$this->$file_type_array);
//进行真实格式验证
if($smfiletypeflag!=false){
$file=fopen($this->$file_tmp_name,"rb");
$bin=fread(file,10);
fclose($file);
$strInfo=@unpack("c10chars",$bin);
$typeCode=intval($strInfo['chars1'].$strInfo['chars2']);
$smfiletypeflag=array_search($typeCode,$this->$file_type_real_array);
if($smfiletypeflag==false){//判断是否是png图片
$typeCode=intval($strInfo['chars2'].$strInfo['chars3'].$strInfo['chars4']);
$smfiletypeflag=array_search($typeCode,$this->$file_type_real_array);
if($smfiletypeflag==false){//判断是否是jpg图片
$$typeCode=intval($strInfo['chars7'].$strInfo['chars8'].$strInfo['chars9'].$strInfo['chars10']);
$smfiletypeflag=array_search($typeCode,$this->$file_type_real_array);
}
}
}
if($smfiletypeflag==false){
$smfilemessage='<strong>文件类型不对,请核实!</strong>';
self::__destruct();
}else{
$resflag=$$this->move_file($$this->$file_tmp_name,$this->$file_name);
if($resflag==1){
$smfilemessage='文件上传成功!';
$this->totalsize+= intval($smfilesize);
self::__destruct();
}else{
$smfilemessage='<strong>文件上传失败!</strong>';
self::__destruct();
}
}
}
$$smfilesizeformat=$this->size_BKM($smfilesize);
echo'<tr>
<tdalign="left">'.$smfilename.'</td>
<tdalign="center">'.$smfiletype.'</td>
<tdalign="center">'.$smfilesizeformat.'</td>
<tdalign="center">'.smfilemessage.'</td>
</tr>';
}
functionmove_file($mvfiletmp,$mvfilename){//移动文件
$mvfilenamearr=explode('.',basename($mvfilename));
$mvfilenamearr[0]=$this->rand_string();
$mvfilename=implode('.',$mvfilenamearr);
if(is_uploaded_file($mvfiletmp)){
$uploadfile=self::FILE_PATH."$mvfilename";
$result=move_uploaded_file($mvfiletmp,$uploadfile);
return$result;
}
}
functionrand_string(){
$string=md5(uniqid(rand().microtime()));
return$string;
}
functionsize_BKM($size){//B/KB/MB单位转换
if($size<1024)
{
$size_BKM=(string)$size."B";
}
elseif($size<(1024*1024))
{
$size_BKM=number_format((double)($size/1024),1)."KB";
}else
{
$size_BKM=number_format((double)($size/(1024*1024)),1)."MB";
}
return$size_BKM;
}
}
?>
希望本文所述对大家的php程序设计有所帮助。