PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 开发编程 > PHP教程 > 正文

    高效的批量处理PHP中的文件上传,图片处理、批量添加代码

    作者:admin来源:网络浏览:时间:2020-09-30 00:07:50我要评论
    导读:本程序使用PHP程序编写,能更高效的批量处理PHP开发中的文件上传,图片处理、批量添加图片水印等问题,在使用本程序前请详细阅读使用说明!...
    本程序使用PHP程序编写,能更高效的批量处理PHP开发中的文件上传,图片处理、批量添加图片水印等问题,在使用本程序前请详细阅读使用说明!

    HTML表单页
     

     
    复制代码代码如下:
    1. <form enctype="multipart/form-data" action="uploadx.php" method="post">  
    2.     <input name="uploadx[]" type="file">  
    3.     <input name="uploadx[]" type="file">  
    4.     <input type="submit" value="上传">  
    5. </form>
    6. uploadx.php处理页
    7. require ('./classes/uploadx.class.php');
    8.  
    9. $uploadx = new uploadx;
    10.  
    11. $uploadx->save = './temp';
    12. $uploadx->name = 'auto';
    13. $uploadx->mini = '200,200,mini';
    14. $uploadx->mark = './images/logo.png,0,60';
    15. print_r($uploadx->is());


    参数说明:

    $uploadx->save
    上传文件的保存目录
    $uploadx->name; 
    上传文件的命名方式
    参数说明 
    auto=自动随机文件名, 
    null=原文件名(覆盖),
    其他自定义如按时间:date('YmdHis'); 
    $uploadx->mini;
    生成缩略图参数
    width = 生成缩略图宽度。
    height = 生成缩略图高度。
    mini = 生成缩略图文件后缀附加名
    默认留空不生成缩略图; 
    $uploadx->mark; 
    上传图片文件添加水印参数:
    水印文件,水印位置,水印透明度

    位置参数说明:
    0 = 随机;
    1 = 左上角;
    2 = 顶部居中;
    3 = 右上角;
    4 = 左居中;
    5 = 中部居中;
    6 = 右居中;
    7 = 左下角;
    8 = 底部居中;
    9 = 右下角;

    $uploadx->is(true);
    返回已上传文件的数组
    is参数说明:
    true = 返回所有上传文件
    false = 过滤失败文件 
    $uploadx->is(); 
    返回数据数组格式说明:
    name = 上传后已保存的文件名
    mini = 生成缩略图的文件名
    mark = 添加水印状态,1表示成功,否则失败
    code = 错误代码:0表示上传成功
    error = 错误信息:上传错误时提示的错误信息
    其中生成缩略图和添加水印功能也可单独使用!

    以上是对uploadx2.0 进行简单的介绍, 
    也欢迎各位能在使用过程中进行改进补充

    例子

     

     
    复制代码代码如下:
    1. <html>
    2. <head>
    3. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    4. <title>uploadx demo</title>
    5. </head>
    6. <body>
    7. <form enctype="multipart/form-data" action="uploadx.php" method="post">
    8.  <input name="uploadx[]" type="file"> <br />
    9.  <input name="uploadx[]" type="file"> <br />
    10.  <input name="uploadx[]" type="file"> <br />
    11.  <input name="uploadx[]" type="file"> <br />
    12.  <br />
    13.  <input type="submit" value="上传所选文件">
    14. </form>
    15. </body>
    16. </html>
    17. <?php
    18. require ('./classes/uploadx.class.php');
    19. $uploadx = new uploadx;
    20. $uploadx->save = './temp';
    21. $uploadx->name = 'auto';
    22. $uploadx->mini = '200,200,mini';
    23. $uploadx->mark = './images/logo.png,0,60';
    24. print_r($uploadx->mini('./temp/2.jpg'));
    25.  
    26. uploadx.class.php
    27. <?php
    28. class uploadx {
    29.   var $form = 'uploadx';
    30.   var $save = './';
    31.   var $size = '1024';
    32.   var $type = 'gif,bmp,png,jpg,jpeg,swf,flv,mp3,wma,rar,zip,7z,doc,docx,ppt,pptx,xls,xlsx,txt,pdf';
    33.   var $name = null;
    34.   var $mini = null;
    35.   var $mark = null;
    36.   var $version = '2.0';
    37.   public function is($type = true){
    38.    foreach ($this->files() as $key => $val) {
    39.     $file = $mini = null;
    40.     $file = $this->saves($val['name'], $val['type'], $val['tmp_name'], $val['size'], $val['error']);
    41.     $file['code'] || $file['path'] = rtrim($this->save,'/').'/'.$file['name'];
    42.     $file['code'] || $file['mini'] = $this->mini($file['path']);
    43.     $file['code'] || $file['mark'] = $this->mark($file['path']);   
    44.     $file['code'] && $file['error'] = $this->error($file['code']);
    45.     $type ? $files[] = $file :  ($file['code'] || $files[] = $file);
    46.    }
    47.     return isset($files) ? $files : array();
    48.   }
    49.   private function files(){
    50.    if(count($_FILES[$this->form])<1) return array();
    51.    if(is_array($_FILES[$this->form]['name'])){
    52.     for($i=0; $i<count($_FILES[$this->form]['name']); $i++) {
    53.      if($_FILES[$this->form]['error'][$i]==4) continue;
    54.      $files[] = array(
    55.       'name'=>$_FILES[$this->form]['name'][$i],
    56.       'type'=>$_FILES[$this->form]['type'][$i],
    57.       'tmp_name'=>$_FILES[$this->form]['tmp_name'][$i],
    58.       'error'=>$_FILES[$this->form]['error'][$i],
    59.       'size'=>$_FILES[$this->form]['size'][$i]);
    60.     }
    61.    }else{
    62.      $files[] = $_FILES[$this->form];
    63.    }
    64.      return $files;
    65.   }
    66.   private function saves($name, $type, $temp, $size, $error){
    67.     if($error) return array('name'=>$name, 'code'=>$error);
    68.     $prefix = strtolower(pathinfo($name, PATHINFO_EXTENSION));
    69.     if(!in_array($prefix, explode(',', strtolower($this->type)))){
    70.      return array('name'=>$name, 'code'=>'-1');
    71.     }
    72.     if($size/1024>$this->size){
    73.      return array('name'=>$name, 'code'=>'-2');
    74.     }
    75.     if(!is_dir($this->save)){
    76.      if(!mkdir($this->save, 0777, TRUE)){
    77.      return array('name'=>$name, 'code'=>'-3');
    78.      }    
    79.     }
    80.     $filename = $this->name ? ($this->name=='auto' ? uniqid() : $this->name) : trim(basename($name,$prefix),'.');
    81.     $savefile = trim($this->save,'/').'/'. $filename.'.'.$prefix;
    82.     if(!@move_uploaded_file($temp,$savefile)){
    83.      return array('name'=>$name, 'code'=>'-4');
    84.     }
    85.      @chmod($savefile,0777);
    86.     return array('name'=>$filename.'.'.$prefix, 'code'=>0);
    87.   }
    88.   public function mini($file = null){
    89.    if(!$file || !$this->mini) return false;
    90.    if(!is_file($file)) return $this->error(-5,$file);
    91.    list($width, $height, $extends) = explode(',', $this->mini);
    92.    $types = array('gif','png','jpg','jpeg');
    93.    $type = pathinfo($file, PATHINFO_EXTENSION);
    94.    if(!in_array($type, $types)) return $this->error(-6);
    95.    if(!is_file($file)) return $this->error(-5,$file);
    96.    $mini = $extends ? basename($file, $type).$extends.'.'.$type : trim(basename($file),'.');
    97.    $image = imagecreatefromstring(file_get_contents($file));
    98.    $imagex = imagesx($image);
    99.    $imagey = imagesy($image);
    100.    $scale = $width / $imagex;
    101.    if($width>$imagex){
    102.     $mini_width = $imagex;
    103.     $mini_height = $imagey;
    104.    }else{
    105.     $mini_width = $width;
    106.     $mini_height = round($scale * $imagey);
    107.    }
    108.    if(function_exists('imagecreatetruecolor') && function_exists('imagecopyresampled')){
    109.     $temp = imagecreatetruecolor($mini_width, $mini_height);
    110.     imagecopyresampled($temp,$image,0,0,0,0,$mini_width, $mini_height, $imagex, $imagey);
    111.    }else{
    112.     $temp = imagecreate($mini_width, $mini_height);
    113.     imagecopyresized($temp,$image,0,0,0,0,$mini_width, $mini_height, $imagex, $imagey);   
    114.    }
    115.     imagejpeg($temp, rtrim($this->save,'/').'/'.$mini, 100);
    116.     imagedestroy($temp);
    117.     imagedestroy($image);
    118.    return is_file(rtrim($this->save,'/').'/'.$mini) ? $mini: false;
    119.   }
    120.   public function mark($file = null){
    121.      if(!$file || !$this->mark) return false;    
    122.      list($watermark, $position, $opacity) = explode(',', $this->mark);
    123.      if(!is_file($file) || !is_file($watermark)) return $this->error(-5,'FILE='.$file.'||'.'Watermark='.$watermark);
    124.    $type = pathinfo($file, PATHINFO_EXTENSION);
    125.    $types = array('gif','png','jpg','jpeg');
    126.    if(!in_array($type, $types)) return $this->error(-6,$file);
    127.          $opacity = min($opacity,100);
    128.    $file_data = imagecreatefromstring(file_get_contents($file));
    129.          $file_width = imagesx($file_data);
    130.          $file_height = imagesy($file_data);
    131.          if (in_array(pathinfo($watermark, PATHINFO_EXTENSION), array('gif','png'))) {
    132.           $mark_data = imagecreatefromstring(file_get_contents($watermark));
    133.           $mark_width = imagesx($mark_data);
    134.           $mark_height =  imagesy($mark_data);
    135.           switch($position){
    136.               case 1: $= 5; $= 5; break;
    137.               case 2: $= ($file_width - $mark_width)/2; $= $mark_height; break;
    138.               case 3: $= ($file_width - $mark_width)-5; $= $mark_height; break;
    139.               case 4: $= 5; $= ($file_height - $mark_height) / 2; break;
    140.               case 5: $= ($file_width - $mark_width)/2; $= ($file_height - $mark_height)/2; break;
    141.               case 6: $= ($file_width - $mark_width)-5; $= ($file_height - $mark_height)/2; break;
    142.               case 7: $= 5; $= ($file_height - $mark_height) - 5; break;
    143.               case 8: $= ($file_width - $mark_width)/2; $= ($file_height - $mark_height)-5; break;
    144.               case 9: $= ($file_width - $mark_width)-5; $= ($file_height - $mark_height)-5; break;
    145.               default: $= rand(0,($file_width - $mark_width)); $= rand(0,($file_height - $mark_height));
    146.           }
    147.      $temp = imagecreatetruecolor($mark_width, $mark_height);
    148.         imagecopy($temp, $file_data, 0, 0, $x, $y, $mark_width, $mark_height);
    149.         imagecopy($temp, $mark_data, 0, 0, 0, 0, $mark_width, $mark_height);
    150.         imagecopymerge($file_data, $temp, $x, $y, 0, 0, $mark_width, $mark_height, $opacity);          
    151.            imagejpeg($file_data, $file, 100);
    152.            imagedestroy($temp);
    153.            imagedestroy($file_data);
    154.            imagedestroy($mark_data);
    155.            return true;
    156.          }else{
    157.            return $this->error(-6,$watermark);
    158.          } //www.bcty365.com
    159.   }
    160.   private function error($code = 0, $extends = ''){
    161.    if($code){
    162.    switch ($code) {   
    163.     case 6:  $error = '写入临时文件夹失败'; break;
    164.     case 5:  $error = '写入系统临时文件夹错误'; break;
    165.     case 4:  $error = '没有文件被上传请检查表单'; break;
    166.     case 3:  $error = '文件上传出错上传不完整'; break;
    167.     case 2:  $error = '文件大小超出表单限制'; break;
    168.     case 1:  $error = '文件大小超出系统限制'; break;
    169.     case -1: $error = '上传文件类型不合法'; break;
    170.     case -2: $error = '上传文件大小超出后台限制'; break;
    171.     case -3: $error = '创建文件保存路径失败'; break;
    172.     case -4: $error = '保存文件失败请检查路径'; break;
    173.     case -5: $error = '读取文件错误'; break;
    174.     case -6: $error = '不支持该操作'; break;
    175.     default: $error = '未知错误';
    176.    }
    177.     return  '['.$code.']:'.$error.$extends;
    178.    }else{
    179.     return false;
    180.    }
    181.   }
    182. }

    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-10-555-1.html