php简单的上传类分享
本文实例为大家分享了php上传类,供大家参考,具体内容如下
<?php
classUploadFile{
var$inputName;//控件名
var$allowType=array(
'image/gif','image/jpg','image/jpeg','image/png','image/x-png','image/pjpeg'
);//上传类型
var$allowSize=2097152;//限制大小
var$saveDir=UPLOAD;//保存目录
var$isRename=true;//是否重命名,默认为true
var$errID=0;//错误代码,默认为0
var$errMsg="";//错误信息
var$savePath="";//保存路径
function__construct($inputName,$allowType="",$allowSize="",$saveDir="",$isRename=true){
if(empty($inputName)){
$this->chk_err(-1);//无传入控件名
}else{
$this->inputName=$inputName;
}
if(!empty($allowType))$this->allowType=$allowType;
if(!empty($allowSize))$this->allowSize=$allowSize;
if(!empty($saveDir))$this->saveDir=$saveDir;
if(!empty($isRename))$this->isRename=$isRename;
}
functionis_uploaded(){
if(empty($_FILES[$this->inputName]['name'])){
$this->chk_err(4);//没有文件被上传
}else{
if(is_uploaded_file($_FILES[$this->inputName]['tmp_name'])){
returntrue;
}else{
$this->chk_err(-2);//文件上传不合法
}
}
}
functionchk_type(){
if(!in_array($_FILES[$this->inputName]['type'],$this->allowType)){
$this->chk_err(-3);//上传的文件类型不被允许
}else{
returntrue;
}
}
functionchk_size(){
if($_FILES[$this->inputName]['size']>$this->allowSize){
$this->chk_(-4);//上传的文件过大
}else{
returntrue;
}
}
functionmove_uploaded(){//移动上传文件
if(!$this->is_uploaded()){
returnfalse;
}
if(!$this->chk_size()){
returnfalse;
}
if(!$this->chk_type()){
returnfalse;
}
//重命名
if($this->isRename){
$arrTmp=pathinfo($_FILES[$this->inputName]['name']);
$extension=strtolower($arrTmp['extension']);
$file_newname=date("YmdHis").rand(1000,9999)."00.".$extension;//重命名新文件,00表示为上传的为原图
}else{
$file_newname=$_FILES[$this->inputName]['name'];
}
if(!file_exists($this->saveDir)){//判断保存目录是否存在
mkdir($this->saveDir,0777,true);//建立保存目录
}
//移动文件
$result=move_uploaded_file($_FILES[$this->inputName]['tmp_name'],$this->saveDir."/".$file_newname);
if($result){
$path=$this->savePath=$this->saveDir.$file_newname;//文件的成功保存路径
return$path;
}else{
$this->chk_err($_FILES[$this->inputName]['error']);
}
}
//判断出错信息
functionchk_err($errID){
$this->errID=$errID;
switch($this->errID){
case-4:
$this->errMsg="上传的文件过大";
break;
case-3:
$this->errMsg="上传的文件类型不被允许";
break;
case-2:
$this->errMsg="文件上传不合法";
break;
case-1:
$this->errMsg="无控件名传入";
break;
case1:
$this->errMsg='上传的文件超出了php.ini中upload_max_filesize设定的最大值';
break;
case2:
$this->errMsg='上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值';
break;
case3:
$this->errMsg='文件只有部分被上传';
break;
case4:
$this->errMsg='没有文件被上传';
break;
default:
break;
}
returnfalse;
}
functionget_errMsg(){
echo$this->errMsg;//输出错误信息
}
/**
+----------------------------------------------------------
*取得图像信息
*
+----------------------------------------------------------
*@static
*@accesspublic
+----------------------------------------------------------
*@paramstring$image图像文件名
+----------------------------------------------------------
*@returnmixed
+----------------------------------------------------------
*/
functiongetImageInfo($img){
$imageInfo=getimagesize($img);
if($imageInfo!==false){
$imageType=strtolower(substr(image_type_to_extension($imageInfo[2]),1));
$imageSize=filesize($img);
$info=array(
"width"=>$imageInfo[0],
"height"=>$imageInfo[1],
"type"=>$imageType,
"size"=>$imageSize,
"mime"=>$imageInfo['mime'],
);
return$info;
}else{
returnfalse;
}
}
/**
+----------------------------------------------------------
*生成缩略图
+----------------------------------------------------------
*@static
*@accesspublic
+----------------------------------------------------------
*@paramstring$image原图
*@paramstring$type图像格式
*@paramstring$thumbname缩略图文件名
*@paramstring$maxWidth宽度
*@paramstring$maxHeight高度
*@paramstring$position缩略图保存目录
*@paramboolean$interlace启用隔行扫描
*@paramboolean$is_save是否保留原图
+----------------------------------------------------------
*@returnvoid
+----------------------------------------------------------
*/
functionthumb($image,$is_save=true,$suofang=0,$type='',$maxWidth=500,$maxHeight=500,$interlace=true){
//获取原图信息
$info=$this->getImageInfo($image);
if($info!==false){
$srcWidth=$info['width'];
$srcHeight=$info['height'];
$type=empty($type)?$info['type']:$type;
$type=strtolower($type);
$interlace=$interlace?1:0;
unset($info);
if($suofang==1){
$width=$srcWidth;
$height=$srcHeight;
}else{
$scale=min($maxWidth/$srcWidth,$maxHeight/$srcHeight);//计算缩放比例
if($scale>=1){
//超过原图大小不再缩略
$width=$srcWidth;
$height=$srcHeight;
}else{
//缩略图尺寸
$width=(int)($srcWidth*$scale);//147
$height=(int)($srcHeight*$scale);//199
}
}
//载入原图
$createFun='ImageCreateFrom'.($type=='jpg'?'jpeg':$type);
$srcImg=$createFun($image);
//创建缩略图
if($type!='gif'&&function_exists('imagecreatetruecolor'))
$thumbImg=imagecreatetruecolor($width,$height);
else
$thumbImg=imagecreate($width,$height);
//复制图片
if(function_exists("ImageCopyResampled"))
imagecopyresampled($thumbImg,$srcImg,0,0,0,0,$width,$height,$srcWidth,$srcHeight);
else
imagecopyresized($thumbImg,$srcImg,0,0,0,0,$width,$height,$srcWidth,$srcHeight);
if('gif'==$type||'png'==$type){
//imagealphablending($thumbImg,false);//取消默认的混色模式
//imagesavealpha($thumbImg,true);//设定保存完整的alpha通道信息
$background_color=imagecolorallocate($thumbImg,0,255,0);//指派一个绿色
imagecolortransparent($thumbImg,$background_color);//设置为透明色,若注释掉该行则输出绿色的图
}
//对jpeg图形设置隔行扫描
if('jpg'==$type||'jpeg'==$type)imageinterlace($thumbImg,$interlace);
//$gray=ImageColorAllocate($thumbImg,255,0,0);
//ImageString($thumbImg,2,5,5,"ThinkPHP",$gray);
//生成图片
$imageFun='image'.($type=='jpg'?'jpeg':$type);
$length=strlen("00.".$type)*(-1);
$_type=substr($image,-4);
$length=($type!=$_type?$length+1:$length);
//裁剪
if($suofang==1){
$thumbname01=substr_replace($image,"01.".$type,$length);//大头像
$thumbname02=substr_replace($image,"02.".$type,$length);//小头像
$imageFun($thumbImg,$thumbname01,100);
$imageFun($thumbImg,$thumbname02,100);
$thumbImg01=imagecreatetruecolor(190,195);
imagecopyresampled($thumbImg01,$thumbImg,0,0,$_POST['x'],$_POST['y'],190,195,$_POST['w'],$_POST['h']);
$thumbImg02=imagecreatetruecolor(48,48);
imagecopyresampled($thumbImg02,$thumbImg,0,0,$_POST['x'],$_POST['y'],48,48,$_POST['w'],$_POST['h']);
$imageFun($thumbImg01,$thumbname01,100);
$imageFun($thumbImg02,$thumbname02,100);
//unlink($image);
imagedestroy($thumbImg01);
imagedestroy($thumbImg02);
imagedestroy($thumbImg);
imagedestroy($srcImg);
returnarray('big'=>$thumbname01,'small'=>$thumbname02);//返回包含大小头像路径的数组
}else{
if($is_save==false){//缩略图覆盖原图,缩略图的路径还是原图路径
$imageFun($thumbImg,$image,100);
}else{
$thumbname03=substr_replace($image,"03.".$type,$length);//缩略图与原图同时存在,
$imageFun($thumbImg,$thumbname03,100);
imagedestroy($thumbImg);
imagedestroy($srcImg);
return$thumbname03;//返回缩略图的路径,字符串
}
}
}
returnfalse;
}
}
以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。