zoukankan      html  css  js  c++  java
  • php上传文件类

    <?php
    
    
    class Upload {
        private $_max_size;
        private $_type_map;
        private $_allow_ext_list;
        private $_allow_mime_list;
        private $_upload_path;
        private $_prefix;
    
        private $_error;//当前的错误信息
        public function getError() {
            return $this->_error;
        }
    
        public function __construct() {
            $this->_max_size = 1024*1024;
            $this->_type_map = array(
                '.png'     => array('image/png', 'image/x-png'),
                '.jpg'    => array('image/jpeg', 'image/pjpeg'),
                '.jpeg'    => array('image/jpeg', 'image/pjpeg'),
                '.gif'    => array('image/gif'),
                );
            $this->_allow_ext_list = array('.png', '.jpg');
            $allow_mime_list = array();
            foreach($this->_allow_ext_list as $value) {
                //得到每个后缀名
                $allow_mime_list = array_merge($allow_mime_list, $this->_type_map[$value]);
            }
            // 去重
            $this->_allow_mime_list = array_unique($allow_mime_list);
            $this->_upload_path = './';
            $this->_prefix = '';
        }
    
        public function __set($p, $v) {//属性重载
            $allow_set_list = array('_upload_path', '_prefix', '_allow_ext_list', '_max_size');
            //可以不加:_ 进行设置
            if(substr($p, 0, 1) !== '_') {
                $p = '_' . $p;
            }
    
            $this->$p = $v;
        }
    
    
        /**
         * 上传单个文件
         */
        public function uploadOne($tmp_file) {
    
            # 是否存在错误
            if($tmp_file['error'] != 0) {
                $this->_error = '文件上传错误';
                return false;
            }
    
            # 尺寸
            if ($tmp_file['size'] > $this->_max_size) {
                $this->_error = '文件过大';
                return false;
            }
    
            # 类型
            # 保证修改允许的后缀名,就可以影响到$allow_ext_list和$allow_mime_list
            # 设置一个后缀名与mime的映射关系
            
            # 后缀,从原始文件名中提取
            $ext = strtolower(strrchr($tmp_file['name'], '.'));
            if (!in_array($ext, $this->_allow_ext_list)) {
                $this->_error = '类型不合法';
                return false;
            }
            # MIME, type元素。
            // $allow_mime_list = array('image/png', 'image/gif', 'image/jpeg', 'image/pjpeg', 'image/x-png');
            
            if (!in_array($tmp_file['type'], $this->_allow_mime_list)) {
                $this->_error = '类型不合法';
                return false;
            }
            //PHP自己获取文件的mime,进行检测
            $finfo = new Finfo(FILEINFO_MIME_TYPE);//获得一个可以检测文件MIME类型信息的对象
            $mime_type = $finfo->file($tmp_file['tmp_name']);//检测
            if (!in_array($mime_type, $this->_allow_mime_list)) {
                $this->_error = '类型不合法';
                return false;
            }
    
    
            # 移动
            # 上传文件存储地址
            //创建子目录
            $subdir = date('YmdH') . '/';
            if(!is_dir($this->_upload_path . $subdir)) {//检测是否存在
                //不存在
                mkdir($this->_upload_path . $subdir);
            }
            # 科学起名
            $upload_filename = uniqID($this->_prefix, true) . $ext;
            if (move_uploaded_file($tmp_file['tmp_name'], $this->_upload_path . $subdir . $upload_filename)) {
                // 移动成功,返回文件名
                return $subdir . $upload_filename;
            } else {
                // 移动失败
                $this->_error = '移动失败';
                return false;
            }
    
        }
    }
  • 相关阅读:
    pythonchallenge10
    线程同步
    查缺补漏
    查看QQ是否在线
    project euler10
    Toon Shading, step 2
    一种简易的卡通渲染方法(上)
    GLSL学习笔记 9.1 Transformation
    Gloss Mapping
    一种简易的卡通渲染方法(下)
  • 原文地址:https://www.cnblogs.com/huodaihao/p/7191199.html
Copyright © 2011-2022 走看看