上传文件函数带生成缩略图(不完整版)

没啥技术含量,唯一的亮点是原创...
function superupload($data){
	/*
	 *	<input type="file" name="upname[]" /> name必须为数组
	 *	2011-8-20 by zhjx922
	 *	超级上传函数
	 *	$data['file'](需要上传的文件),$data['fmode'](文件存放方式),$data['size'](文件大小,单位为KB)
	 *	$data['type'](允许上传的类型<格式jpg,gif,txt>),$data['img'](启用图片大小限制,maxwidth,maxheight)
	 *	$data['thumb'](生成缩略图)<$data['thumb']['width'],$data['thumb']['height']>
	 */

	//文件夹存放方式
	if(!isset($data['fmode']))$data['fmode']='no';
	if(!isset($data['diy']))$data['diy']='zhjx922_';
	$fMode = array(
		'days' => date("Y").date("m").date("z").'/',
		'weeks' => date("Y").date("W").'/',
		'months' => date("Y").date("m").'/',
		'years' => date("Y").'/',
		'no'	=>	''
	);
	//上传文件命名规则
	$nMode = array(
		'default' => $data['diy'].date("Ymd").time().rand(100,999)	//上传后文件名命名规则,可以自定义
	);
	//错误信息
	$uploadErrors = array(
        '0'=>'上传成功!',
        '1'=>'文件超过了 php.ini 中 upload_max_filesize 选项限制的值。',
        '2'=>'文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。',
        '3'=>'只有部分文件被上传。',
        '4'=>'没有文件被上传。',
        '6'=>'找不到临时文件夹请检查。',
		'7'=>'文件写入失败。',
		'10'=>'不允许上传该类型。',
		'11'=>'文件大小超过限制',
		'12'=>'图片宽度超出限制',
		'13'=>'图片高度超出限制',
	);
	$result = array();
	if(!isset($data['path'])){
		$data['path'] = dirname(__FILE__).'/upload/';
	}
	$pathstr = substr($data['path'], -1);
	if($pathstr!='/'||$pathstr!='\\'){
		$data['path'] = $data['path'].'/';
	}

	$folder = $fMode[$data['fmode']];
	$data['path'] = str_replace("\\", '/', $data['path'].$folder);

	if(!is_file($data['path'])){
		@mkdir($data['path'], 0777, true);
	}

	//开始上传
	$data['file'] = FILES[$data['file']];
	//后缀名一律转小写
	$typearr = explode(',',$data['type']);
	foreach($typearr as $k => $v){
		$newtype[$k] = strtolower($v);
	}
	foreach($data['file']['name'] as $k=>$v){
		if(isset($data['file']['name'][$k])){
			$result[$k]['name'] = $data['file']['name'][$k];
			$result[$k]['type'] = $data['file']['type'][$k];
			$result[$k]['size'] = $data['file']['size'][$k];
			$fix = strtolower(getUpFix(basename($data['file']['name'][$k])));
			if(isset($data['type'])&&!empty($data['type'])){
				if(empty($fix) || !in_array($fix,$newtype)){
					$result[$k]['msg'] = $uploadErrors['10'];
					$result[$k]['success'] = '0';	//失败
					continue;
				}
			}
			if(isset($data['img'])){
				list($result[$k]['imgwidth'], $result[$k]['imgheight'], $result[$k]['imgtype'], $result[$k]['imgattr']) = @getimagesize($data['file']['tmp_name'][$k]);
				if(isset($data['maxwidth'])&&$result[$k]['imgwidth']>$data['maxwidth']){
					$result[$k]['msg'] = $uploadErrors['12'];
					continue;
				}
				if(isset($data['maxheight'])&&$result[$k]['imgheight']>$data['maxheight']){
					$result[$k]['msg'] = $uploadErrors['13'];
					continue;
				}
			}
			if(isset($data['size'])&&@filesize($data['file']['tmp_name'][$k])>$data['size']*1024){
				$result[$k]['msg'] = $uploadErrors['11'];
				$result[$k]['success'] = '0';	//失败
				continue;
			}
			$upname = $nMode['default'].'_'.$k.'.'.$fix;
			if(file_exists($data['path'].$upname)){
				$upname = $nMode['default'].'_'.$k.$k.'.'.$fix;
			}
			if (!@move_uploaded_file($data['file']['tmp_name'][$k], $data['path'].$upname)){
				$result[$k]['success'] = '0';	//失败
			}else{
				$result[$k]['success'] = '1';	//成功
				$result[$k]['path'] = $folder.$upname;
				if(isset($data['thumb'])){
					$data['thumb']['src'] = $data['path'].$upname;
					superthumb($data['thumb']);
				}
			}
			$result[$k]['msg'] = $uploadErrors[$data['file']['error'][$k]];
		}
	}

//	if($k=='0'){
//		return $result[$k];
//	}else{
		return $result;
//	}

}

 

function superthumb($data){
	/*
	 *	2011-8-20 by zhjx922
	 *	超级缩略图函数
	 *	$data['src'](源文件),$data['auto'](自动缩放),$data['width'](生成宽度),$data['height'](生成高度)
	 *	$data['path'](保存路径,不设置输出图像),$data['img'](启用图片大小限制,maxwidth,maxheight)
	 *	$data['n']
	 */
	$thumbErrors = array(
		'0'=>'生成失败',
		'1'=>'源文件不存在',
		'2'=>'不支持该格式图片',
		'3'=>'只有部分文件被上传。',
		'4'=>'没有文件被上传。',
		'6'=>'找不到临时文件夹请检查。',
		'7'=>'文件写入失败。',
		'10'=>'不允许上传该类型。',
		'11'=>'文件大小超过限制',
		'12'=>'图片宽度超出限制',
		'13'=>'图片高度超出限制',
	);

	//$src,$dst_width,$dst_height,$path=null
	$filename = realpath($data['src']);
	if(!file_exists($filename)){
		header("Content-Type:text/html;charset=utf-8");
		echo $thumbErrors['1'];
		exit();
	}

	list($src_width, $src_height, $type) = getimagesize($filename);
	if(isset($data['auto'])){
		if(isset($data['width'])){
			$dst_width = $data['width'];
			$scale = $src_width/$dst_width;
			$dst_height = $src_height/$scale;
		}else if(isset($data['height'])){
			$dst_height = $data['height'];
			$scale = $src_height/$dst_height;
			$dst_width = $src_width/$scale;
		}else{
			//手动设置宽高度
			$dst_width = $data['width'];
			$dst_height = $data['height'];
		}
	}else{
		//手动设置宽高度
		$dst_width = $data['width'];
		$dst_height = $data['height'];
	}

//	$color = imagecolorallocate($image_p, 255 , 255, 255);	//背景颜色(白色255,255,255)

//	imagefill($image_p, 0, 0, $color);

	switch($type){
		case 1:
			$image = imagecreatefromgif($filename);
			break;
		case 2:
			$image = imagecreatefromjpeg($filename);
			break;
		case 3:
			$image = imagecreatefrompng($filename);
			imagealphablending($image,false);
			imagesavealpha($image,true); //保存alpha通道信息(PNG)
			break;
		default:
			echo $thumbErrors['2'];
			exit();
	}

	$src_image = imagecreatetruecolor($dst_width,$dst_height);//创建小图
	if($type=='3'){
		imagealphablending($src_image,false);
		imagesavealpha($src_image,true);
	}
    imagecopyresampled($src_image,$image,0,0,0,0,$dst_width,$dst_height,$src_width,$src_height);
    switch($type){
		case 1:
			//GIF背景透明
			$bgcolor=ImageColorAllocate($src_image,0,0,0);
			$bgcolor = ImageColorTransparent($src_image,$bgcolor) ;
			imagegif($src_image, $data['src']);//输出图像
			break;
		case 2:
			imagejpeg($src_image, $data['src'], 100);//输出图像
			break;
		case 3:
			imagepng($src_image, $data['src']);//输出图像
			break;
		default:
			imagejpeg($src_image, $data['src'], 100);//输出图像
	}
	//销毁
	imagedestroy($src_image);
}

function getUpFix($file_name)
{
	$extend =explode("." , $file_name);
	$va=count($extend)-1;
	return $extend[$va];
}


 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值