Home  >  Article  >  Backend Development  >  PHP function to upload files and generate thumbnails

PHP function to upload files and generate thumbnails

WBOY
WBOYOriginal
2016-07-25 09:00:321287browse
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;
}
?>


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn