PHP通用文件上传类

由于做项目中经常遇到文件上传,因此封装了一个通用的文件上传类,作用支持组文件上传,并且不同的上传域可以上传不同的文件类型,不同的文件类型限制的文件大小也可能不相同。举例来说:用户可上传一种展品并可为该展品上传一张缩略图,那么缩略图文件限制类型可能为jpg,gif,png等,而展品文件限制类型可能为mov,avi,mpeg等,而图片大小可能限制为100KB,音频视频大小可能限制为2MB。类代码如下:/*文件上传类*/classUpload{public$InputName;//文件上传域控件名/***允许上传的文件类型*形式为array(”image/jpeg”,”image/png”,”image/gif”)或包含此类数组的数组*/public$FileType;/***最大上传文件大小*形式为array(”image”=$size,”audio”=$size)或包含此类数组的数组或一数值*/public$FileMaxSize;public$FileSavePath;//文件保存路径public$FileSaveName;//文件保存名public$NoteFileFalse;//文件错误提示public$NoteFileType;//文件类型不符提示public$NoteFileSize;//文件大小超出提示/*上传文件并返回文件名信息*/publicfunctionUploadFile(){$this-CheckFile();//检验文件$file=$_FILES[$this-InputName];$file_number=count($file[”name”]);//要上传的文件数$file_save_full_name=array();//文件保存名for($i=0;$i$file_number;$i++){$name=$file[”name”][$i];if(!empty($name))//文件不为空{/*确定文件保存路径*/if(is_array($this-FileSavePath)){$file_save_path=$this-FileSavePath[$i];}else{$file_save_path=$this-FileSavePath;}/*确定文件保存名*/if(is_array($this-FileSaveName)){$file_save_name=$this-FileSaveName[$i];}else{$file_save_name=$this-FileSaveName;}/*开始保存*/$this-CreatePath($file_save_path);//如果路径不存在则创建路径if(!move_uploaded_file($file[tmp_name][$i],$file_save_path.$file_save_name.$this-GetSuffix($file[”name”][$i]))){die($name.”文件上传失败”);}else{$file_save_full_name[]=$file_save_name.$this-GetSuffix($file[”name”][$i]);}}else{$file_save_full_name[]=null;}}unlink($file);/*如果只有一个文件,则返回单个文件名*/if(count($file_save_full_name)==1){$file_save_full_name=$file_save_full_name[0];}return$file_save_full_name;}/*检验文件*/privatefunctionCheckFile(){$file=$_FILES[$this-InputName];$file_number=count($file[”name”]);//要上传的文件数for($i=0;$i$file_number;$i++){if(!empty($file[”name”][$i]))//文件不为空{$name=$file[”name”][$i];$type=$file[”type”][$i];$size=$file[”size”][$i];$error=$file[”error”][$i];/*确定允许上传文件类型列表*/if(is_array($this-FileType[0])){$file_type=$this-FileType[$i];}else{$file_type=$this-FileType;}/*确定最大上传文件大小*/if(is_array($this-FileMaxSize)){$file_max_size_key=explode(”/”,$type);$file_max_size_key=$file_max_size_key[0];if(is_array($this-FileMaxSize[0])){$file_max_size=$this-FileMaxSize[$i][$file_max_size_key];}else{$file_max_size=$this-FileMaxSize[$file_max_size_key];}}else{$file_max_size=$this-FileMaxSize;}/*文件错误*/if($error0){die($name.
$this-NoteFileFalse);}/*文件类型不符*/if(!in_array($type,$file_type)){die($name.
$this-NoteFileType);}/*文件大小超过最大上传文件大小*/if(!is_null($file_max_size)$size$file_max_size){die($name.
$this-NoteFileSize);}}}}/*获取文件后缀名*/privatefunctionGetSuffix($fileName){returnsubstr($fileName,strrpos($fileName,.));}/*如果路径不存在则创建路径*/privatefunctionCreatePath($filePath){if(!file_exists($filePath)){mkdir($filePath);}}}
使用方法:接着以本文开头所举例子来说明该类的调用方法:$upload_obj = new
Upload(); // 文件上传对象$upload_obj-InputName = ”upload_test”; //
文件上传域控件名$upload_obj-FileType = array(array(”image/jpeg”,
”image/png”), array(”audio/mpeg”, ”video/x-msvideo”)); //
允许上传的文件类型$upload_obj-FileMaxSize = array(”image” = 100 *
1024, ”audio” = 2 * 1024 * 1024, ”video” = 2 * 1024 * 1024);
$upload_obj-FileSavePath = array(”upload/files/s/”,
”upload/files/z/”);$upload_obj-FileSaveName =
time();$upload_obj-NoteFileFalse =
”文件错误”;$upload_obj-NoteFileType =
”文件类型不符”;$upload_obj-NoteFileSize =
”文件大小超出”;$file_save_full_澳门新葡亰手机版,name = $upload_obj-UploadFile(); //
上传并获取文件全名总结:就此可轻松实现若干文件上传,其实归根结底用到了PHP组文件上传,要注意的就是控件名的name后别忘了加上[],这样的好处就是遇到多个文件上传时就不用在调用层进行循环或一个一个处理上传了,我们的应用也因此而轻松。