php文件上传

这段时间需要用到文件上传,也用过文件上传组件,因为有三个地方上传,所以上传这个地方很乱。今天抽时间重写了一次,上传格式包括bmp,jpg,png

function file_upload($temp_file,$pv_width,$pv_height,$th_width,$th_height,$addon_path=''){
      $res=array(
        'status'=>FALSE,
        'msg'=>'',
        'pv_path'=>'',
        'thumb_path'=>''
      );
      if(!file_exists($temp_file)){
          $res['msg']='文件上传失败';
          return $res;
      }
      if(filesize($temp_file) < 1024){
          $res['msg']='文件大小小于1kb';
          return $res;
      }
    $imagetype=  exif_imagetype($temp_file);

    if(!in_array($imagetype, array(IMAGETYPE_PNG,IMAGETYPE_JPEG ,IMAGETYPE_BMP))){
        $res['msg']='当前只支持jpg,png,bmp格式图片';
        return $res;
    }
    $suffix='';
    $im ='';
    switch ($imagetype){
        case IMAGETYPE_PNG:
            $suffix='.png';
            $im=imagecreatefrompng($temp_file);
            break;
        case IMAGETYPE_JPEG:
            $suffix='.jpg';
            $im=  imagecreatefromjpeg($temp_file); 
            break;
        case IMAGETYPE_BMP:
            $suffix='.jpg';
            //函数在 http://www.yiyou.org/php5%E5%87%BD%E6%95%B0%E8%87%AA%E5%AE%9A%E4%B9%89imagecreatefrombmp/
            $im=ImageCreateFromBMP($temp_file);
            break;
    }
    //iphone拍照上传图片会自动反转问题处理
    if($imagetype ==IMAGETYPE_JPEG){ //只有jpg 才支持exif
        $exif = exif_read_data($temp_file);
        if(!empty($exif['Orientation'])) {
            switch($exif['Orientation']) {
                case 8:
                    $source = imagerotate($im,90,0);
                    break;
                case 3:
                    $source = imagerotate($im,180,0);
                    break;
                case 6:
                    $source = imagerotate($im,-90,0);
                    break;
            }
        }
    }
    $filename=  md5(time().rand(1, 99)).$suffix;
    //文件上传目录,按日期分类
    $web_path='/Public/upload/'.$addon_path.'/'. date("Y/m/d").'/';
    $local_dir= ROOT_PATH.$web_path;
    if(!is_dir($local_dir)){
        @mkdir($local_dir,0755,TRUE);
    }
    
    $local_file=$local_dir.$filename;
    
    //裁剪图片
    list($src_w,$src_h)=getimagesize($temp_file); //获取图像尺寸
    
    //原图宽度比: 修正后宽/原图宽= 比率
    $new_img='';
    if($src_w > $pv_width){
        $src_scale = $pv_width/$src_w;
        $pv_height=intval($src_h*$src_scale);
         //生成大图
        $new_img=imagecreatetruecolor($pv_width, $pv_height);
        imagecopyresampled($new_img, $im, 0, 0, 0, 0, $pv_width, $pv_height, $src_w, $src_h);
    }  else {
        $new_img=$im; //复制一次
    }
    
    switch ($imagetype){
        case IMAGETYPE_PNG:
            imagepng($new_img,$local_file);
            break;
        case IMAGETYPE_JPEG:
            imagejpeg($new_img, $local_file);
            break;
        case IMAGETYPE_BMP:
            imagejpeg($new_img,$local_file); 
            break;
    }

    //缩略图
    $local_file_thumb=$local_dir.'thumb_'.$filename;
    if($th_width >0){
        //参考http://www.yiyou.org/%E6%B7%98%E5%AE%9Dtclip-php_ext%E5%AE%89%E8%A3%85/
        @tclip($local_file,$local_file_thumb,$th_width,$th_height);
    }
    return  array(
        'status'=>true,
        'msg'=>'上传成功',
        'pv_path'=>$web_path.$filename,
        'thumb_path'=>$web_path.'thumb_'.$filename,
        'filename'=>$filename
      );
}
/***  以下为使用方法 ****/
//基于文件流方式上传
function image(){
    $temp_file  =  tempnam ( sys_get_temp_dir (),'lsb_upload_');
    file_put_contents($temp_file, file_get_contents("php://input"));
    $result=$this->file_upload($temp_file, 750, 0, 200, 200);
    if($result['status'] ==TRUE){
        //成功处理
    }else{
        //失败处理
    }
}
//这是wangEditor 上传
function wysiwyg(){
     if(isset($_FILES['wangEditorH5File'])){
        $result=$this->file_upload($_FILES['wangEditorH5File']['tmp_name'], 710, 0, 0, 0,'project');
        if($result['status']==true){
            echo $result['pv_path'];
        }else{
            echo  'error|'.$result['msg'];
        }
     }  else {
        echo  'error|上传失败';
     }
}