没啥技术含量,唯一的亮点是原创...
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];
}