2018-06-18 17:33:30  286599 1

一个简单实用的PHP文件上传类

 标签:   


PHP文件上传类


文件上传 :图片  视频   文档


图片上传的步骤

获取上传图片的信息    $_FILES
验证上传图片的格式     
验证上传图片的大小    
创建上传目录(如果没有)
上传文件到指定目录下


获取上传图片的信息



$_FILES

$_FILES['myFile']['name'] 显示客户端文件的原名称。
$_FILES['myFile']['type'] 文件的 MIME 类型,例如"image/gif"。
$_FILES['myFile']['size'] 已上传文件的大小,单位为字节。
$_FILES['myFile']['tmp_name'] 储存的临时文件名,一般是系统默认。
$_FILES['myFile']['error'] 该文件上传相关的错误代码。一下为不同代码代表的意思:


0; 文件上传成功。
1; 超过了文件大小php.ini中即系统设定的大小。
2; 超过了文件大小  MAX_FILE_SIZE 选项指定的值。
3; 文件只有部分被上传。
4; 没有文件被上传。
5; 上传文件大小为0。


关于文件上传大小的几种错误情况



1; 超过了文件大小php.ini中即系统设定的大小。

// upload_max_filesize = 2M 默认

2 超过post的文件大小  php.ini配置

   post_max_size = 8M

POST Content-Length of 21497234 bytes exceeds the limit of 8388608 bytes in

3 nginx报错误
   
   client_max_body_size 20m;

413 Request Entity Too Large


下面就是图片上传类


前端展示页面

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title> 文件上传</title>
</head>
<body>

	<form action="upload.php" method="post" enctype="multipart/form-data" >
				<input type="file" name="img" /> <br/>
				<input type="submit" value="上传" />
	</form>
</body>
</html>

后端代码

class Upload{
    
    private $errorNo;
    
    private $errMsg;
    
    private $name;
    
    private $ext;
    
    private $allow_ext;
    
    private $allow_size ;
    
    private $size;
    
    private $dir ;
    
    private $sub_dir;
    
    const DS = DIRECTORY_SEPARATOR;
    
    private $tmp_name;
    
    public function __construct($file,$dir = 'uploads',$allow_ext= ['jpg','png','gif','jpeg'],
    
    $allow_size = 2097152){

        $this->errorNo = $file['error'];
        $this->name = $file['name'];
        $this->size = $file['size'];
        $this->tmp_name = $file['tmp_name'];
        $this->allow_ext = $allow_ext;
        $this->allow_size = $allow_size;
        $this->dir = $dir;
    }
    
    public function upload(){

        if(!$this->checkFile()){

            return $this->errMsg;
        }

        $this->createDir();
        
        return $this->move();
    }
    
    private function checkFile(){
         if(!$this->checkError()){
             $this->errMsg = '上传图片有问题';
             return false;
         }
        
         if(!$this->checkExt()){

             $this->errMsg = '上传图片的扩展名有问题';
             return false;
         }
         
         if(!$this->checkSize()){
              $this->errMsg = '上传图片的大小问题';
              return false;
         }
         return true;
        
    }
    //检测上传信息
    private function checkError(){
        if($this->errorNo!=0){
            return false;
        }
        return true;
    }
    //检测扩展名
    private function checkExt(){
        //验证文件的扩展名
        $this->ext = pathinfo($this->name,PATHINFO_EXTENSION );

        if(!in_array($this->ext,$this->allow_ext)){
            return false;
        }
        return true;
    }
    //检测大小
    private function checkSize(){
        

        if($this->size>$this->allow_size){
            return false;
        }
        return true;
    }
    //创建目录
    private function createDir(){

        $this->sub_dir = $this->dir.self::DS.date('Y-m-d');

        if(!is_dir($this->dir)){
            mkdir($this->dir); 
            mkdir($this->sub_dir);
        }elseif(!is_dir($this->sub_dir)){
            mkdir($this->sub_dir);
        }
    }
    
    //移动文件到指定目录
    private  function move(){
        $img_name = date('YmdHis').rand(1000,9999).'.'.$this->ext;
        move_uploaded_file($this->tmp_name,$this->sub_dir.self::DS.$img_name);
        
        return $this->sub_dir.self::DS.$img_name;
    }
}


类的使用

$file = $_FILES['img'];
//第一个参数必选  第二个设置上传目录 可选  第三个 设置允许上传的扩展名  第四个 设置允许上传文件的大小
$upload = new Upload($file);
echo $upload->upload();



1 条留言此文章没有人评论

给我留言

评论内容