您的位置:首页 > 编程语言 > PHP开发

PHP 文件上传处理函数

2013-10-30 15:08 597 查看
<?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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息