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;
        }

    }
}
时间: 2024-12-17 15:09:05

php上传文件类的相关文章

PHP 上传文件类

<?php /** * * @name upload.class.php * 上传文件类 * @author Peter * @createtime 2014-11-20 10:30:29 * */ class upload{ public $max_size; //上传file大小 public $allow_types; //上传文件类型 public $file_name; //文件名 public $errmsg; //错误提示 public $uploaded; //后的文件名 pub

C# 通用上传文件类

1.Upfile.aspx: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Upfile.aspx.cs" Inherits="Inc_Upfile" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or

上传文件的响应

package com.lovobook.RandomCodeServlet; import java.io.File;import java.io.IOException;import java.io.PrintWriter;import java.util.Collection; import javax.servlet.ServletException;import javax.servlet.annotation.MultipartConfig;import javax.servlet.

android-async-http上传文件

1. AsyncHttpClient, RequestParams ,AsyncHttpResponseHandler三个类使用方法 (1)AsyncHttpClientpublic class AsyncHttpClient extends java.lang.Object 该类通常用在android应用程序中创建异步GET, POST, PUT和DELETE HTTP请求,请求参数通过RequestParams实例创建,响应通过重写匿名内部类 ResponseHandlerInterface

SpringBoot上传文件到七牛云

准备工作 maven pom.xml添加七牛云的sdk依赖 <dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>7.2.27</version> </dependency> 配置项 七牛云上传必要的配置有:accessKey.secretKey.bucket 其中accessKey.

SpringMVC 学习-上传文件分解器 CommonsMultipartResolver 类

Spring 组件 CommonsMultipartResolver 类的主要作用是配置文件上传的一些属性,也可以控制上传文件的大小. 在 springmvc-servlet.xml 配置文件中: <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="d

asp无惧上传类2.2上传文件的同时,通过 Request.QueryString将参数传递到保存页面中

先转一段文字,对不对再评论 在后台asp程序中,以前获取表单提交的ASCII 数据,非常的容易.但是如果 需要获取上传的文件,就必须使用Request对象的BinaryRead方法来读取.BinaryRead方法是对当前输入流进行指定字节数的二进制读取,有点需要注意的 是,一旦使用BinaryRead 方法后,再也不能使用Request.Form 或  Request.QueryString 集合了.结合Request对象的TotalBytes属性,可以将 所有表单提交的数据全部变成二进制,不过

FileUpload 上传文件 帮助类

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

利用WebRequest类上传文件

说明:1.WebRequest类是一个抽象类,所以上传类实际使用的是其子类 2.打开Fiddler软件,监视正常网页的文件上传,可以看到http协议的请求和响应信息,简略说明 (第一行:请求说明 POST http://localhost/UpLoad.aspx HTTP/1.1 (请求类型:post,请求地址: http://localhost/UpLoad.aspx,http协议类型:HTTP/1.1) 第二行至多行:请求头(一系列的 key:value) User-Agent: Mozil