Rumah >pembangunan bahagian belakang >tutorial php >php上传文件并生成缩略图的函数
php 上传文件并生成缩略图的代码,分为单文件与多文件上传,并可以生成缩略图,确实不错,建议大家参考学习下。
完整代码如下。 <?php /**************************************************** * 返回值:失败:false; 成功:路径. * UpLoadFileOne(file元素名, 文件夹, 文件类型, 大小). * 完成一个文件上传功能的函数 * site http://bbs.it-home.org ****************************************************/ function UpLoadFileOne($input, $path='upload', $ftype='gif,jpg,png', $fsize=2){ if(strrpos($path, '/') < strlen($path)-1) $path .= '/'; //上传文件夹. $Atype = explode(',', $ftype); //文件类型. $fsize = $fsize*1048576; //(1024*1024==1048576=1M)限文件大小,按字节. $fileInfo = $_FILES[$input]; //文件信息 $name = $fileInfo['name']; //客户端机器文件的原名称。 $size = $fileInfo['size']; //上传文件的大小,单位为字节。 $type = $fileInfo['type']; //上传文件类型. $tmp_name = $fileInfo['tmp_name']; //文件被上传后在服务端储存的临时文件名。 $error = $fileInfo['error']; //结果错误信息. if($error == 0){ $type = MyFileType($type); //检测上传文件类型 $myfile = CreatMyFile($path); //创建文件夹 if($myfile==false) return false; else $path = $myfile.MakeFname($type); //文件路径.文件名 if(in_array($type,$Atype) && $size<=$fsize && is_uploaded_file($fileInfo['tmp_name'])){ if(@move_uploaded_file($tmp_name, $path)) return str_replace(array('../','./'), '', $path); else return false; }else return false; }else return false; } /***************************************************** * 完成多个文件上传功能的函数: http://bbs.it-home.org * UpLoadFileAll(file元素名,路径,类型,大小) * <input name='pic[]' id='pic' type='file' size='25'> * <input name='pic[]' id='pic' type='file' size='25'> ******************************************************/ function UpLoadFileAll($input='UpPic', $path='upload', $ftype='jpg,gif,png', $fsize=2){ $fileInfo = $_FILES[$input]; //文件信息 if(strrpos($path, '/') < strlen($path)-1) $path .= '/'; //上传文件夹. $myfile = CreatMyFile($path); //创建文件夹 if($myfile==false) return false; $Atype = explode(',', $ftype); //文件类型. $fsize = $fsize*1048576; //(1024*1024==1048576=1M)限文件大小,按字节. $js = "以下文件上传成功:\\n\\n"; if(is_array($fileInfo["error"])){ foreach ($fileInfo["error"] as $key => $error){ if ($error == 0) { $name = $fileInfo["name"][$key]; //客户端机器文件的原名称. $size = $fileInfo["size"][$key]; //上传文件的大小,单位为字节. $type = $fileInfo["type"][$key]; //上传文件类型. $tmp_name = $fileInfo["tmp_name"][$key]; //文件被上传后在服务端储存的临时文件名. $type = MyFileType($type); //检测上传文件类型. $path = $myfile.MakeFname($type); //文件路径包括文件名. if(in_array($type, $Atype) && $size<=$fsize){ if(@move_uploaded_file($tmp_name, $path)){ $array[] = $path; $js .= " ".$name." 上传成功 !\\n"; } } } } } echo ""; return $array; } /***************************************************************************** * 重设图片尺寸大小:ResizeImage(原图片路径,缩略图(最大)宽度,缩略图(最大)高度) * 返回值: * 失败返回: FLASH. * 成功返回:缩略图路径. *****************************************************************************/ function ResizeImage($path, $maxwidth, $maxheight){ $picS = substr($path, -3); $name = substr($path, 0, strrpos($path, '.')).'_S'; switch($picS){ case 'jpg': $im = @imagecreatefromjpeg($path); break; case 'gif': $im = @imagecreatefromgif($path); break; default: $im = @imagecreatefrompng($path); } $width = imagesx($im); $height = imagesy($im); if(($maxwidth && $width > $maxwidth) || ($maxheight && $height > $maxheight)){ if($maxwidth && $width > $maxwidth){ $widthratio = $maxwidth/$width; $RESIZEWIDTH=true; }//end if if($maxheight && $height > $maxheight){ $heightratio = $maxheight/$height; $RESIZEHEIGHT=true; }//end if if($RESIZEWIDTH && $RESIZEHEIGHT){ if($widthratio < $heightratio){ $ratio = $widthratio; }else{ $ratio = $heightratio; } }elseif($RESIZEWIDTH){ $ratio = $widthratio; }elseif($RESIZEHEIGHT){ $ratio = $heightratio; }//end if $newwidth = $width * $ratio; $newheight = $height * $ratio; if(function_exists("imagecopyresampled")){ $newim = imagecreatetruecolor($newwidth, $newheight); imagecopyresampled($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); }else{ $newim = imagecreate($newwidth, $newheight); imagecopyresized($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); }//end if }else{ $newim = $im; }//end if switch($picS){ case 'jpg': $PicPath = $name.".jpg"; if(imagejpeg($newim, $PicPath)){ imagedestroy($newim); return str_replace(array('../','./'), '', $PicPath); }else{ return false; } break; case 'gif': $PicPath = $name.".gif"; if(imagegif($newim, $PicPath)){ imagedestroy($newim); return str_replace(array('../','./'), '', $PicPath); }else{ return false; } break; default: $PicPath = $name.".png"; if(imagepng($newim, $PicPath)){ imagedestroy($newim); return str_replace(array('../','./'), '', $PicPath); }else{ return false; } }//end switch }//end function /************************** * 文件属性 $type = 文件属性 ***************************/ function MyFileType($type) { $type = strtolower($type); switch($type) { //OFFICE case 'application/msword' : $type = 'doc'; break; case 'application/vnd.ms-excel': $type = 'xls'; break; case 'application/vnd.ms-powerpoint': $type = 'ppt'; break; //压缩 case 'application/octet-stream': $type = 'rar'; break; //文本 case 'text/plain': $type = 'txt'; break; //图片 case 'image/pjpeg': $type = 'jpg'; break; case 'image/gif': $type = 'gif'; break; case 'image/x-png': $type = 'png'; break; case 'image/bmp': $type = 'bmp'; break; default : $type = 'err'; } return $type; //返回文件类型. } /****************** * 创建文件夹(路径) *******************/ function CreatMyFile($fname=''){ switch($fname){ case '': break; default: if(strrpos($fname, '/') < strlen($fname)-1) $fname .= '/'; } $fname .= date("Y-m"); if(is_dir($fname)) return $fname.'/'; if(mkdir($fname, 0755)==false) return false; //if(chmod($fname, 0777)==false) return false; return $fname.'/'; } /***************************** * 生成文件名 * $fname ==> 文件名称 * $ftype ==> 文件类型 *****************************/ function MakeFname($ftype) { $fname = date("mdHis").'_'.rand(100000, 999999); return $fname.'.'.$ftype; } ?> |