PHP实现原生态图片上传封装类方法
PHP图片上传类,经典方式,不过上传效率还算可以,我自己用过的一个类,当时对这个类做了些修改,以满足自己特定功能的需要,对PHP熟悉的,可对这个上传类做优化和修改,后附有调用方法,让PHP开发者上传图片轻松容易就做到,先上类代码:
<?php classFileUpload_Single { //userdefine------------------------------------- var$accessPath; var$fileSize=200; var$defineTypeList="jpg|jpeg|gif|bmp";//stringjpg|gif|bmp... var$filePrefix="useruplod_";//上传后的文件名前缀,可设置为空 var$changNameMode;//图片改名的规则,暂时只有三类,值范围:0至2任一值 var$uploadFile;//arrayuploadfileattribute var$newFileName; var$error; functionTODO() {//main主类:设好参数,可以直接调用 $pass=true; if(!$this->GetFileAttri()) { $pass=false; } if(!$this->CheckFileMIMEType()) { $pass=false; $this->error.=die("<scriptlanguage=\"javascript\">alert('图片类型不正确,允许格式:jpg|jpeg|gif|bmp。');history.back()</script>"); } if(!$this->CheckFileAttri_size()) { $pass=false; $this->error.=die("<scriptlanguage=\"javascript\">alert('上传的文件太大,请确保在200K以内。');history.back()</script>"); returnfalse; } if(!$this->MoveFileToNewPath()) { $pass=false; $this->error.=die("<scriptlanguage=\"javascript\">alert('上传失败!文件移动发生错误!');history.back()</script>"); } return$pass; } functionGetFileAttri() { foreach($_FILESas$tmp) { $this->uploadFile=$tmp; } return(empty($this->uploadFile['name']))?false:true; } functionCheckFileAttri_size() { if(!empty($this->fileSize)) { if(is_numeric($this->fileSize)) { if($this->fileSize>0) { return($this->uploadFile['size']>$this->fileSize*1024)?false:true; } } else { returnfalse; } } else { returnfalse; } } functionChangeFileName($prefix=NULL,$mode) {//string$prefix,int$mode $fullName=(isset($prefix))?$prefix."_":NULL; switch($mode) { case0:$fullName.=rand(0,100)."_".strtolower(date("ldSfFYhisa"));break; case1:$fullName.=rand(0,100)."_".time();break; case2:$fullName.=rand(0,10000).time();break; default:$fullName.=rand(0,10000).time();break; } return$fullName; } functionMoveFileToNewPath() { $newFileName=NULL; $newFileName=$this->ChangeFileName($this->filePrefix,2).".".$this->GetFileTypeToString(); //检查目录是否存在,不存在则创建,当时我用的时候添加了这个功能,觉得没用的就注释掉吧 /* $isFile=file_exists($this->accessPath); clearstatcache(); if(!$isFile&&!is_dir($this->accessPath)) { echo$this->accessPath; @mkdir($this->accessPath); }*/ $array_dir=explode("/",$this->accessPath);//把多级目录分别放到数组中 for($i=0;$i<count($array_dir);$i++){ $path.=$array_dir[$i]."/"; if(!file_exists($path)){ mkdir($path); } } ///////////////////////////////////////////////////////////////////////////////////////////////// if(move_uploaded_file($this->uploadFile['tmp_name'],realpath($this->accessPath)."/".$newFileName)) { $this->newFileName=$newFileName; returntrue; }else{ returnfalse; } ///////////////////////////////////////////////////////////////////////////////////////////////// } functionCheckFileExist($path=NULL) { return($path==NULL)?false:((file_exists($path))?true:false); } functionGetFileMIME() { return$this->GetFileTypeToString(); } functionCheckFileMIMEType() { $pass=false; $defineTypeList=strtolower($this->defineTypeList); $MIME=strtolower($this->GetFileMIME()); if(!empty($defineTypeList)) { if(!empty($MIME)) { foreach(explode("|",$defineTypeList)as$tmp) { if($tmp==$MIME) { $pass=true; } } } else { returnfalse; } } else { returnfalse; } return$pass; } functionGetFileTypeToString() { if(!empty($this->uploadFile['name'])) { returnsubstr(strtolower($this->uploadFile['name']),strlen($this->uploadFile['name'])-3,3); } } } ?>
以下是PHP上传类的调用方法,PHP代码如下:
<?php include'up.class.php';//加载PHP上传类文件 if(empty($HTTP_POST_FILES['image_file']['tmp_name']))//判断接收数据是否为空 { $tmp=newFileUpload_Single; $tmp->accessPath='upload';//图片上传的目录,这里是当前目录下的upload目录,可自己修改 if($tmp->TODO()) { $filename=$tmp->newFileName;//生成的文件名 echo"图片上传成功,路径为:upload/".$filename; }else{ echo$tmp->error; } } else{ echo"没有图片数据可上传"; } ?>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。