zoukankan      html  css  js  c++  java
  • PHP封装 文件上传

    <?php
    namespace Lib;
    class Upload{
        private $path;  //上传的路径
        private $size;  //上传的大小
        private $type;  //允许上传的类型
        private $error; //保存错误信息
        
        public function __construct($path,$size,$type) {
            $this->path=$path;
            $this->size=$size;
            $this->type=$type;
        }
        //返回错误信息
        public function getError(){
            return $this->error;
        }
        /*
         * 文件上传
         * @param $files array $_FILES[]
         * @return bool|string 成功返回文件路径,失败返回false
         */
        public function uploadOne($files){
            if($this->checkError($files)){              //没有错误就上传
                $foldername= date('Y-m-d');                //文件夹名称            
                $folderpath= $this->path.$foldername;    //文件夹路径
                if(!is_dir($this->path)){
                    mkdir($this->path);
                    if(!is_dir($folderpath)){
                        mkdir($folderpath);
                    } 
                } 
                $filename=uniqid('',true).strrchr($files['name'],'.');  //文件名
                $filepath="$folderpath/$filename";                        //文件路径
                if(move_uploaded_file($files['tmp_name'],$filepath))
                    return "{$foldername}/{$filename}";
                else{
                    $this->error='上传失败<br>';
                    return false;
                }
            }
            return false;
        }
        //验证上传是否有误
        private function checkError($files){
            //1、验证错误号
            if($files['error']>0){
                switch($files['error']) {
                    case 1:
                        $this->error='文件大小超过了php.ini中允许的最大值,最大值是:'.ini_get('upload_max_filesize');
                        return false;
                    case 2:
                        $this->error='文件大小超过了表单允许的最大值';
                        return false;
                    case 3:
                        $this->error='只有部分文件上传';
                        return false;
                    case 4:
                        $this->error='没有文件上传';
                        return false;
                    case 6:
                        $this->error='找不到临时文件';
                        return false;
                    case 7:
                       $this->error='文件写入失败';
                        return false;
                    default:
                       $this->error= '未知错误';
                        return false;
                }
            }
            //2、验证格式
            $info=finfo_open(FILEINFO_MIME_TYPE);
            $mime=finfo_file($info,$files['tmp_name']);
            if(!in_array($mime, $this->type)){
                $this->error='只能上传'.implode(',', $this->type).'格式';
                return false;
            }
            //3、验证大小
            if($files['size']> $this->size){
                $this->error='文件大小不能超过'.number_format($this->size/1024,1).'K';
                return false;
            }
            //4、验证是否是http上传
            if(!is_uploaded_file($files['tmp_name'])){
                $this->error='文件不是HTTP POST上传的<br>';
                return false;
            }
            return true;
        }
    }
    ?>
  • 相关阅读:
    Vue项目碰到"‘webpack-dev-server’不是内部或外部命令,也不是可运行的程序或批处理文件"报错
    PowerDesigner最基础的使用方法入门学习
    Centos7 上安装mysql遇上的问题:mysql无法正常启动
    微信小程序的Web API接口设计及常见接口实现
    模型数据作渲染优化时遇到的问题
    vertex compression所遇到的问题
    depth and distance
    Linear or non-linear shadow maps?
    实施vertex compression所遇到的各种问题和解决办法
    【转】編譯Ogre1.9 IOS Dependencies及Ogre Source步驟及相關注意事項…
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/14168436.html
Copyright © 2011-2022 走看看