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"没有图片数据可上传";
}
?>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。