一个自创的图片上传类miniUpload

upload-logo-01
由于接触PHP的一年以内吧,基本上都是写过程式的代码,框架从没接触过,当遇到文件上传功能时,总是松散的写段过程式代码应付,导致代码的规范性很差,所以决定自己写一个文件上传小类。

<?php
/**
 * 一个简易的PHP上传类
 * @author xuwenzhi github.com/azxuwen
 * @since  v1  2013-7-24
 */
class miniUpload{
    public $fileName     = null;
    public $filePath     = 'upload/file/';
    public $fileMaxSize  = 2000000;
    public $fileType     = array(
            'image/jpg',
            'image/jpeg', 
            'image/gif',
        );
    public $boolWH       = false;   //是否允许改变上传图片的宽和高
    public $fileWidth    = null;    //图片的宽度
    public $fileHeight   = null;    //图片的高度
    public $fileMinTitle = '';  //图片的小标题
    public $fileContent  = ''; //图片的内容
    //判断图片的格式和大小是否满足标准
    public function checkImg(){
        //检测大小
        if($this->fileName['size'] > $this->fileMaxSize){
            echo'<script> alert("图片过大,请从新选择 !"); location.replace ("img1.php") </script>'; 
            exit();
        }
        //检测类型

        if(!in_array($this->fileName['type'],$this->fileType)){
            //提示没有此种类型
            echo'<script> alert("不支持您的扩展名,请从新选择!"); location.replace ("img1.php") </script>'; 
        }

    }
    //处理上传
    public function finishUpload(){
        $this->fileName['name'] = $this->createRandName().".jpg";//图片的新名称(带扩展名)
        $filename = $this->filePath."/".$this->fileName['name'];//制作图片存放的文件路径
        $dbFileName = $this->fileName['name']; //需要存放到数据库中的图片
        if(!move_uploaded_file($this->fileName['tmp_name'],  $filename)){
              echo'<script> alert("图片上传失败!"); location.replace ("index.php") </script>'; exit();
        }
        if($this->boolWH){
            $this->resize_image($filename, $filename, $this->fileWidth, $this->fileHeight);
        }
        return $dbFileName;
    }
    //为图片生成随机名称
    public function createRandName(){
        $randStr = '';
        $pattern='1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ';
        for($i=0 ; $i<20; $i++){
            $randStr .= $pattern[rand(0, 51)];
        }
        return $randStr;
    }
    /******************************************************************/
    /**
     * 改变图片的宽高
     * @param string $img_src 原图片的存放地址或url
     * @param string $new_img_path 新图片的存放地址
     * @param int $new_width 新图片的宽度
     * @param int $new_height 新图片的高度
     * @return bool 成功true, 失败false
     */
    public function resize_image($img_src, $new_img_path, $new_width, $new_height)
    {
        $img_info = @getimagesize($img_src);
        if (!$img_info || $new_width < 1 || $new_height < 1 || empty($new_img_path)) {
            return false;
        }
        if (strpos($img_info['mime'], 'jpeg') !== false) {
            $pic_obj = imagecreatefromjpeg($img_src);
        } else if (strpos($img_info['mime'], 'gif') !== false) {
            $pic_obj = imagecreatefromgif($img_src);
        } else if (strpos($img_info['mime'], 'png') !== false) {
            $pic_obj = imagecreatefrompng($img_src);
        } else {
            return false;
        }
        $pic_width = imagesx($pic_obj);
        $pic_height = imagesy($pic_obj);
        if (function_exists("imagecopyresampled")) {
            $new_img = imagecreatetruecolor($new_width,$new_height);
            imagecopyresampled($new_img, $pic_obj, 0, 0, 0, 0, $new_width, $new_height, $pic_width, $pic_height);
        } else {
            $new_img = imagecreate($new_width, $new_height);
            imagecopyresized($new_img, $pic_obj, 0, 0, 0, 0, $new_width, $new_height, $pic_width, $pic_height);
        }
        if (preg_match('~.([^.]+)$~', $new_img_path, $match)) {
            $new_type = strtolower($match[1]);
            switch ($new_type) {
                case 'jpg':
                    imagejpeg($new_img, $new_img_path);
                    break;
                case 'gif':
                    imagegif($new_img, $new_img_path);
                    break;
                case 'png':
                    imagepng($new_img, $new_img_path);
                    break;
                default:
                    imagejpeg($new_img, $new_img_path);
            }
        } else {
            imagejpeg($new_img, $new_img_path);
        }
        imagedestroy($pic_obj);
        imagedestroy($new_img);
        return true;
    }
}

使用方法:

require 'miniUpload.class.php'; 
$uploadImg = new miniUpload(); 
$uploadImg->fileName = &$_FILES['fileName'];
//file path 
$uploadImg->ImgPath = 'upload/img'; 
//check name 
$uploadImg->ImgType = array('image/jpg','image/jpeg', 'image/gif'); $uploadImg->checkImg();
//完成上传
$file_path = $uploadImg->finishUpload();

后来把这个小类放到了我的github上,传送门地址:https://github.com/xuwenzhi/miniUpload

一个自创的图片上传类miniUpload
Tags:     

发表评论

电子邮件地址不会被公开。 必填项已用*标注