php通用实用文件上传类随机命名后缀限制

2019-06-18 13:51 来源: 未知
不多说直接上代码,支持随机命名,路径,文件大小,后缀限制 ?php class UploadFile{ //完整实例 $upload = new UploadFile(true, '../yuming/', 'xls|xlsx'); 随机命名、路径、允许的后缀 private $max_size =
不多说直接上代码,支持随机命名,路径,文件大小,后缀限制
 
<?php

  class UploadFile{ //完整实例 $upload = new UploadFile(true, '../yuming/', 'xls|xlsx'); 随机命名、路径、允许的后缀
    
	private $max_size   = '8000000'; //设置上传文件的大小,此为8M

    
    public function __construct($rand_name, $save_path, $allow_type){
      $this->rand_name = $rand_name;
      $this->save_path = $save_path;
      $this->allow_type = $this->get_allow_type($allow_type);
    }
    

	public function upload_file($file){
		
      $this->file_name   = $file['name'];
      $this->file_size   = $file['size'];
      $this->error     = $file['error'];
      $this->file_tmp_name = $file['tmp_name'];
      
      $this->ext = $this->get_file_type($this->file_name);
      
      switch($this->error){
        case 0: $this->msg = ''; break;
        case 1: $this->msg = '超出了php.ini中文件大小'; break;
        case 2: $this->msg = '超出了MAX_FILE_SIZE的文件大小'; break;
        case 3: $this->msg = '文件被部分上传'; break;
        case 4: $this->msg = '没有文件上传'; break;
        case 5: $this->msg = '文件大小为0'; break;
		case 6: $this->msg = '找不到临时文件夹'; break;
		case 7: $this->msg = '文件写入失败'; break;
        default: $this->msg = '上传失败'; break;
      }
	  
      if($this->error==0 && is_uploaded_file($this->file_tmp_name)){
        //检测文件类型
        if(in_array($this->ext, $this->allow_type)==false){
          $this->msg = '文件类型不正确';
          return false;
        }
        //检测文件大小
        if($this->file_size > $this->max_size){
          $this->msg = '文件过大';
          return false;
        }
		
		$this->set_file_name();
		$this->uploaded = $this->save_path.$this->new_name;
		
		if(move_uploaded_file($this->file_tmp_name, $this->uploaded)){
			$this->msg = '文件上传成功';
			return true;
		}else{
			$this->msg = '文件上传失败';
			return false;
		}
      }
    }
    
    /**
    * 设置上传后的文件名
    * 当前的毫秒数和原扩展名为新文件名
    */
    public function set_file_name(){
      if($this->rand_name==true){
        $a = explode(' ', microtime());
        $t = $a[1].($a[0]*1000000);
        $this->new_name = $t.'.'.($this->ext);
      }else{
        $this->new_name = $this->file_name;
      }
    }
    
    /**
    * 获取上传文件类型
    * @param string $filename 目标文件
    * @return string $ext 文件类型
    */
    public function get_file_type($filename){
      $ext = pathinfo($filename, PATHINFO_EXTENSION);
      return $ext;
    }
    
    /**
     * 获取可上传文件的类型
     */
    public function get_allow_type($allow_type){
      $s = array();
      $s = preg_split("/[\s,|;]+/", $allow_type);
      return $s;
    }
    
    //获取错误信息
    public function name(){
      return $this->new_name;
    }
	
	public function msg(){
      return $this->msg;
    }
	
	public function error(){
      return $this->error;
    }
  }

后端调用实例
 
require '../up.php'; //引入上面文件
	$file = $_FILES['file']; //取得传入文件
	$upload = new UploadFile(true, '../upl/', 'xls|xlsx'); //随机命名开启,保存路径,允许的文件类型
	$upload->upload_file($file); //上传开始

	if($upload->error() > 0){ //错误提取
		echo "Error: " . $upload->msg();
	}else{
		
		$xlsname=$upload->name(); //上传成功,文件名
}
 
推荐内容
  • PhpSpreadsheet PHPExcel fgetcsv速度对比

    PHP表格读取速度对比,PhpSpreadsheet PHPExcel fgetcsv读取大文件对比。 单读取推荐 PHPExcel,PhpSpreadsheet支持功能更多一些,csv文件 推荐 使用fgetcsv 单独出来处理。

  • CKEditor 5 进阶设置 图片上传 字体大小 新窗口打开超链接

    CKEditor即大名鼎鼎的FCKeditor(文本编辑器),它终于在最近发布新版本了,与增加版本号不同,这次完全把它改名了,更名为CKeditor。CKEditor 5是替代CKEditor 4的最新版本,支持个性化定制功能。

  • iis789隐藏更改响应头Server:Microsoft-IIS/7.5

    现在iis url重写模块基本是必备组件,直接添加规则即可修改出站Server值 1.找到url重写组件 2.新建规则 3.写好规则并保存 变量名RESPONSE_SERVER 模式 .* 操作值就是 显示的Server 可以随便设置

  • 如何做好网站安全指导篇

    1.系统层 搞一个强壮的远程密码 开启防火墙,封闭用不到的端口 改默认远程端口,开启防扫 经常更新系统,保持最新 2.环境层 更新环境最新 比如当前 PHP7,关闭一些用不到的支持组件

  • IIS - 解决设置的404页面对.php无效的问题(No input file specified.)

    问题描述: .php 后缀地址报错No input file specified 环境iis7.5 解决办法: (1)打开IIS管理器,选择需要设置404页面的网站,双击打开右侧的处理程序映射按钮。 (2)找到php条目后双击。 (

  • linux服务器添加多ip的方法(centos系统)

    1、利用putty工具连接到服务器。 2、输入:vi /etc/sysconfig/network-scripts/ifcfg-eth0 回车。 3、输入i进行编辑 4、假如小明的vps主ip为123.123.123.1,购买了3个ip分别是123.123.123.2、123.123.123.3、123.