upload.func.php的代码
<?php
/***
构建上传文件信息函数
*/
function buildInfo(){
if(!$_FILES){
return ;
}
$i=0;
foreach($_FILES as $v){
//如果是单文件
if(is_string($v['name'])){ //判断$v是一个数字还是字符串 如果是字符串就是 单文件上传 如果是数组就是多文件上传
$files[$i]=$v;
$i++;
}else{
//多文件
foreach($v['name'] as $key=>$val){
$files[$i]['name']=$val;
$files[$i]['size']=$v['size'][$key];
$files[$i]['tmp_name']=$v['tmp_name'][$key];
$files[$i]['error']=$v['error'][$key];
$files[$i]['type']=$v['type'][$key];
$i++;
}
}
}
return $files;
}
/***
uploadFile()文件上传函数
@param string $path 上传图片到这个文件夹下
@param array $allowExt 文件类型数组
@param string $maxSize 文件大小
@param boolean $imgFlag 判断是否是真实的图片文件(没有改过的文件名后缀)
*/
function uploadFile($path="uploads",$allowExt=array("gif","jpeg","png","jpg","wbmp"),$maxSize=51200,$imgFlag=true){
if(!file_exists($path)){ //如果uploads文件夹不存在
mkdir($path,755,true); //mkdir() 函数创建目录。 将默认的访问权限0777 改为写入权限755
}
$i=0;
$files=buildInfo(); //调用文件信息函数 实现单文件和多文件混传 或者单文件上传 或者多文件上传
if(!($files&&is_array($files))){
return ;
}
//判断错误信息
foreach($files as $file){
if($file['error']===UPLOAD_ERR_OK){ //没有错误
$ext=getExt($file['name']); //得到文件扩展名
//检测文件的扩展名
if(!in_array($ext,$allowExt)){
exit("非法文件类型");
}
//校验是否是一个真正的图片类型
if($imgFlag){
//验证图片是否是一个真正的图片类型
//getimagesize()取得 GIF、JPEG 及 PNG 三种 WWW 上图片的高与宽,
if(!getimagesize($file['tmp_name'])){
exit("不是真正的图片类型");
}
}
//上传文件的大小
if($file['size']>$maxSize){ //不能大于500kb
exit("上传文件过大");
}
if(!is_uploaded_file($file['tmp_name'])){ //如果是post上传
exit("不是通过HTTP POST方式上传上来的");
}
$filename=getUniName().".".$ext; //得到文件扩展名
$destination=$path."/".$filename; //文件路径
//move_uploaded_file() 函数将上传的文件移动到新位置。 若成功,则返回 true,否则返回 false。
if(move_uploaded_file($file['tmp_name'], $destination)){
$file['name']=$filename; //文件名 = 唯一的字符串拼上文件扩展名
unset($file['tmp_name'],$file['size'],$file['type']); //销毁无用的文件信息
$uploadedFiles[$i]=$file;
$i++;
}
}else{
switch($file['error']){
case 1:
$mes="超过了配置文件上传文件的大小";//UPLOAD_ERR_INI_SIZE
break;
case 2:
$mes="超过了表单设置上传文件的大小"; //UPLOAD_ERR_FORM_SIZE
break;
case 3:
$mes="文件部分被上传";//UPLOAD_ERR_PARTIAL
break;
case 4:
$mes="没有文件被上传1111";//UPLOAD_ERR_NO_FILE
break;
case 6:
$mes="没有找到临时目录";//UPLOAD_ERR_NO_TMP_DIR
break;
case 7:
$mes="文件不可写";//UPLOAD_ERR_CANT_WRITE;
break;
case 8:
$mes="由于PHP的扩展程序中断了文件上传";//UPLOAD_ERR_EXTENSION
break;
}
echo $mes;
}
}
return $uploadedFiles;
}
//服务器端PHP配置文件
//file_uploads=On 支持通过HTTP POST方式上传文件
//upload_tmp_dir="E:\xampp\tmp" 临时文件保存的路径
//max_file_uploads=20 表单上传的文件的最大大小默认为2M
//post_max_size=8M 表单已post方式发送数据的最大值默认是8M
//客户端进行配置
//<input type="hidden" name="MAX_FILE_SIZE" value="1024"/>
?>
/////////////////////////////////////
image.func.php文件的代码
<?php
require_once '../include.php'; //包含字符串处理文件
/***
@param $sess_name session中保存验证码的名字
@param $type 验证码类型
@param $length 验证码长度
@param $pixel 默认需不需要干扰元素 true需要 false不需要
*/
function verifyImage($type=1,$length=4,$sess_name = 'verify'){
$chars = bulidRandomString(1,4); //调用随机数函数
$_SESSION[$sess_name] = $chars;
echo $_SESSION[$sess_name];
}
/***
* 生成缩略图函数thumb()
@param string $filename 传入的图像
@param string $destination 文件夹
@param int $dst_w 画布宽
@param int $dst_h 画布高
@param boolean $isReservedSource 是否删除原文件
@param number $scale 缩放比例
return string $dstFilename 返回文件名
*/
function thumb($filename,$destination=null,$dst_w=null,$dst_h=null,$isReservedSource=true,$scale=0.5){
//得到原图像的宽高和类型 赋值给变量$src_w,$src_h,$imagetype
list($src_w,$src_h,$imagetype) = getimagesize($filename);
//如果没有传比例就用默认的缩放比例
//$scale=0.5; //默认的缩放比例
//is_null 检测是否为空
if(is_null($dst_w)||is_null($dst_h)){
$dst_w=ceil($src_w*$scale); //新图像宽=原图像宽乘以缩放比例
$dst_h=ceil($src_h*$scale); //新图像高=原图像高乘以缩放比例
}
//image_type_to_mime_type — 取得 getimagesize,exif_read_data,exif_thumbnail,exif_imagetype 所返回的图像类型的 MIME 类型 返回文件类型
$mime = image_type_to_mime_type($imagetype);
$createFun = str_replace("/", "createfrom", $mime); //$createFun = imagecreatefromjpeg
$outFun = str_replace("/",null,$mime); //$outFun = imagejpeg
//imagecreatetruecolor 新建一个画布资源
$src_image = $createFun($filename); //创建原图像资源
//imagecreatetruecolor 新建一个画布资源
$dst_image = imagecreatetruecolor($dst_w, $dst_h);
/***
* 重采样图片并拷贝
bool imagecopyresampled ( resource $dst_image , resource
$src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int
$dst_w , int $dst_h , int $src_w , int $src_h )
$dst_image:新建的图片
$src_image:需要载入的图片
$dst_x:设定需要载入的图片在新图中的x坐标
$dst_y:设定需要载入的图片在新图中的y坐标
$src_x:设定载入图片要载入的区域x坐标
$src_y:设定载入图片要载入的区域y坐标
$dst_w:设定载入的原图的宽度(在此设置缩放)
$dst_h:设定载入的原图的高度(在此设置缩放)
$src_w:原图要载入的宽度
$src_h:原图要载入的高度
imagecopyresampled()用来改变图像大小
*/
imagecopyresampled($dst_image, $src_image, 0, 0, 0, 0, $dst_w, $dst_h, $src_w, $src_h);
//file_exists() 函数检查文件或目录是否存在
//dirname() 函数返回路径中的目录部分。
/***
mkdir() 函数创建目录。
mkdir(path,mode,recursive,context)
path 必需。规定要创建的目录的名称。
mode 必需。规定权限。默认是 0777。 改为755文件可写
*/
if($destination&&!file_exists(dirname($destination))){ //如果文件存在 目录也不存在
mkdir(dirname($destination),755,true); //创建目录
}
//getUniName()生成唯一字符串函数.文件扩展名
$dstFilename = $destination==null?getUniName().".".getExt($filename):$destination;
$outFun($dst_image,$dstFilename);
imagedestroy($src_image); //销毁原图像
imagedestroy($dst_image); //销毁新图像
//$isReservedSource = false; //默认不保留原文件
if(!$isReservedSource){ //如果不需要保留原文件
unlink($filename); //删除原文件
}
return $dstFilename; //返回文件名
}
?>