PHP 文件上传处理函数

<?php
/**
 * 文件上传处理函数
 * @param array $upfile, 表示上传文件信息,如$_FILES['pic'];
 * @param string $path, 表示储存上传文件目录路径;
 * @param array $typelist 表示允许上传的文件类型;默认为array()表示不限制
		如图片类型限制: $typelist=array("image/jpeg","image/gif","image/png");
 * @param int $maxsize, 表示允许上传文件的大小,默认为0, 表示不限制
 * @return 若成功返回上传成功的文件名,失败则返回布尔值false.
 */
function doUpload($upfile,$path,$typelist=array(),$maxsize=0){
	//判断path是否有效
	if(!file_exists($path) || !is_dir($path)){
		return false; //
	}
	//1.判断文件上传是否成功
	if($upfile['error']>0){
		/*
		switch($upfile['error']){
			case 1:  $info="上传的文件超过了 php.ini 中";  break;
			case 2:  $info="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE ";  break;
			case 3:  $info="文件只有部分被上传";  break;
			case 4:  $info="没有文件被上传";  break;
			case 6:  $info="找不到临时文件夹";  break;
			case 7:  $info="文件写入失败";  break;
			default: $info="未知错误!";
		}*/
		return false;
	}

	//2. 过滤文件的类型
	 if(!empty($typelist) && count($typelist)>0){
		//判断当前上传文件类型是否不在数组typelist中
		if(!in_array($upfile['type'],$typelist)){
			//exit("上传文件类型错误!".$upfile['type']);
			return false;
		}
	  }

	//4. 上传文件大小的过滤(对当前上传文件大小的验证)
	  if($maxsize>0){
		if($upfile[size]>$maxsize){
			return false;//exit("文件大小超出!");
		}
	  }
	   

	//5. 对上传文件的文件名的处理
	 $ext = pathinfo($upfile['name'],PATHINFO_EXTENSION); //获取上传文件的后缀名
	   //随机一个文件名
	 do{
		$newfile = date("YmdHis").rand(1000,9999).".".$ext;
	 }while(file_exists($path."/".$newfile)); //若文件存在,则重新随机
		
	//6. 执行文件上传移动处理
	if(is_uploaded_file($upfile['tmp_name'])){
		if(move_uploaded_file($upfile['tmp_name'],$path."/".$newfile)){
			return $newfile; //上传文件成功
		}else{
			return false;//echo "上传文件失败!";
		}
	}else{
		return false;//echo "不是有效的上传文件!";
	}

}


//图片等比缩放函数
function updateImage($picname,$path,$prix="s_",$maxwidth=100,$maxheight=100){
	//1. 定义变量和计算图片信息
	//$picname = "38.jpg"; //图片名称
	//$path = "./image";		//图片存放路径
	//$prix = "d_"; //缩放后的前缀名
	//$maxwidth=130; //最大的宽
	//$maxheight=130; //最大的高

	$info = getimagesize($path."/".$picname);  //获取图片文件的属性信息
	$width = $info[0]; //原图片的宽度
	$height = $info[1]; //原图片的高度

	//计算压缩后的尺寸
	if(($maxwidth/$width)<($maxheight/$height)){
		$w=$maxwidth;//新图片的宽度
		$h=($maxwidth/$width)*$height;//新图片的高度
	}else{
		$h=$maxheight;//新图片的宽度
		$w=($maxheight/$height)*$width;//新图片的高度
	}


	//2. 创建图像源
	$newim =imagecreateTrueColor($w,$h); //新图片源
	//根据原图片类型来创建图片源
	switch($info[2]){
		case 1: //gif格式
			$srcim = imageCreateFromgif($path."/".$picname);
			break;
		case 2: //jpeg格式
			$srcim = imageCreateFromjpeg($path."/".$picname);
			break;
		case 3: //png格式
			$srcim = imageCreateFrompng($path."/".$picname);
			break;
		default:
			exit("无效的图片格式!");
			break;
	}

	//3. 执行缩放处理
	imagecopyresized($newim,$srcim,0,0,0,0,$w,$h,$width,$height);


	//4. 输出保存绘画
	header("Content-Type:".$info['mime']); //设置响应类型为图片格式
	//根据原图片类型来保存新图片
	switch($info[2]){
		case 1: //gif格式
			imagegif($newim,$path."/".$prix.$picname); //保存
			//imagegif($newim);//输出
			break;
		case 2: //jpeg格式
			imagejpeg($newim,$path."/".$prix.$picname);
			//imagejpeg($newim);
			break;
		case 3: //png格式
			imagepng($newim,$path."/".$prix.$picname);
			//imagepng($newim);
			break;
	}

	//4. 销毁资源
	imageDestroy($newim);
	imageDestroy($srcim);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值