php之文件上传类代码

简介: /* 单个文件上传 功能 上传文件 配置允许的后缀 配置允许的大小 获取文件后缀 判断文件的后缀 报错 */ class UpTool{ protected $allowExt = 'jpg,jpeg,gif,bmp,png'; protected $maxSize = 1; //1M
/*  
单个文件上传  
  
功能  
上传文件  
配置允许的后缀  
配置允许的大小  
  
获取文件后缀  
判断文件的后缀  
报错  
*/  
class UpTool{  
    protected $allowExt = 'jpg,jpeg,gif,bmp,png';  
    protected $maxSize = 1; //1M ,以M为单位  
  
    protected $file = null; //准备储存上传文件信息  
    protected $errno = 0;  //错误代码  
    protected $error = array(  
            0=>'无错',  
            1=>'上传文件大小超出系统限制',  
            2=>'上传文件的大小超出网页表单限制',  
            3=>'文件只有部分被上传',  
            4=>'没有文件被上传',  
            6=>'找不到临时文件夹',  
            7=>'文件写入失败',  
            8=>'不允许的文件后缀',  
            9=>'文件大小超出类的允许范围',  
            10=>'创建目录失败',  
            11=>'文件移动失败'  
        );  
  
    /*  
    上传  
    */  
    public function up($key) {  
        if (!isset($_FILES[$key])) {  
            return false;  
        }  
        $f = $_FILES[$key];  
  
        //检验上传是否成功  
        if ($f['error']) {  
            $this->errno = $f['error'];  
            return false;  
        }  
  
        //获取后缀  
        $ext = $this->getExt($f['name']);  
        //检查后缀  
        if (!$this->isAllowExt($ext)) {  
            $this->errno = 8;  
            return false;  
        }  
        //检查大小  
        if (!$this->isAllowSize($f['size'])) {  
            $this->errno = 9;  
            return false;  
        }  
        //创建目录  
        $dir = $this->mk_dir();  
        if ($dir == false) {  
            $this->errno = 10;  
            return fasle;  
        }  
  
        //生成随机文件名  
        $newname = $this->randName() . '.' .$ext;  
        //$dir = $dir . '/' .$newname;  
        //移动  
        if(!move_uploaded_file($f['tmp_name'], $dir . '/' .$newname)) {  
            $this->errno = 11;  
            return false;  
        }  
        return true;//str_replace(ROOT, '', $dir);  
    }  
  
    public function getErr(){  
        return $this->error[$this->errno];  
    }  
  
    /*  
    parm string $exts 允许的后缀  
    自动添加 允许的后缀,和文件的大小  
    */  
    public function setExt($exts) {  
        $this->allowExt = $exts;  
    }  
    public function setSize($num) {  
        $this->maxSize = $num;  
    }  
  
  
    /*  
        string $file  
    return string $ext 后缀   
    */  
  
    protected function getExt($file) {  
        $tmp = explode('.', $file);  
        return end($tmp);  
    }  
    /*  
    string $ext 文件后缀  
    return bool  
    防止大小写的问题  
    */  
    protected function isAllowExt($ext) {  
        return in_array(strtolower($ext), explode(',', strtolower($this->allowExt))) ;  
          
    }  
  
    /*  
        检查文件的大小  
    */  
    protected function isAllowSize($size) {  
        return $size <= $this->maxSize *1024*1024;  
    }  
    //按日期创建目录的方法  
    protected function mk_dir() {  
        $dir = 'images/' . date('Ym/d');  
        if(is_dir($dir) || mkdir($dir,0777,true)) {  
            return $dir;  
        } else {  
            return false;  
        }  
    }  
  
    /*  
        生成随机文件名  
    */  
    protected function randName($length = 6) {  
        $str = 'abcdefghijkmnpqrstuvwxyz23456789';  
        return substr(str_shuffle($str),0,$length);  
    }  
  
}
form 表单
<form action="up.php" method="post" enctype="multipart/form-data">  
        用户名:<input type="text" name="username" /> <br/>  
        头像:   <input type="file" name="pic" />  
        <input type="submit" value="提交" />  
    </form>

 

另起页面调用

 

require('./UpTool.class.php');  
  
$uptool = new UpTool();  
$uptool->setExt('rar,doc');  
$uptool->setSize(1);  
  
  
if ($uptool->up('pic')) {  
    echo '上传成功';  
} else {  
    echo '失败';  
    echo $uptool->getErr();  
}



 

目录
相关文章
|
1月前
|
PHP 开发者
PHP中的命名空间:优雅解决代码冲突与组织结构
在PHP开发中,命名空间是一种重要的工具,可以帮助开发者避免代码冲突、提高代码组织结构和可读性。本文将深入探讨PHP中命名空间的概念、使用方法以及实际应用场景,帮助读者更好地理解和运用命名空间来优化他们的PHP代码。
|
2月前
|
Java 程序员 PHP
PHP对象和类
PHP对象和类
22 0
|
2月前
thinkphp5.1隐藏index.php入口文件
thinkphp5.1隐藏index.php入口文件
31 0
thinkphp5.1隐藏index.php入口文件
|
12天前
|
关系型数据库 MySQL
web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
|
17天前
|
PHP 开发者
【专栏】介绍PHP的命名空间,它是一个用于封装代码、避免名称冲突的机制
【4月更文挑战第27天】本文介绍了PHP的命名空间,它是一个用于封装代码、避免名称冲突的机制。命名空间的作用包括:防止大型项目中的命名冲突,提升代码可读性和可维护性,以及方便代码重用。文章详细阐述了如何定义、导入命名空间,使用完全限定名称以及设置命名空间别名。通过实例展示了命名空间在项目模块划分和第三方库如Laravel中的应用,强调了命名空间在组织和管理PHP代码中的关键作用。
|
10天前
|
存储 监控 安全
PHP医院安全(不良)事件报告系统源码 vue2+element支持11大类不良事件上报、审核处理、分析改进
医院安全(不良)事件管理系统采用无责的、自愿的填报不良事件方式,有效地减轻医护人员的思想压力,实现以事件为主要对象,可以自动、及时、实际地反应医院的安全、不良、近失事件的情况,更好地掌握不良事件的发生趋势,为及时采取适当的管理措施和流程、制度改进提供了良好的量化依据。系统通过汇集不同类型事件的报告,从中分析出医院内部潜在的问题和风险,将发生的事故降到最低,从而保证病人安全和医护人员安全。
21 0
|
14天前
|
安全 PHP
【PHP开发专栏】PHP文件上传与下载实现
【4月更文挑战第30天】本文介绍了在PHP中实现文件上传和下载的详细步骤。文件上传通过`$_FILES`全局数组处理,包括设置HTML表单、PHP脚本处理上传及安全性考虑。文件下载则可使用`readfile()`、`fpassthru()`或`file_get_contents()`函数,同时关注安全问题,如防止目录遍历漏洞。文中还提供了一个简单的图片分享网站案例,演示了上传和下载功能的集成。
|
14天前
|
安全 PHP 数据库
【PHP开发专栏】PHP文件包含漏洞与防范
【4月更文挑战第30天】本文探讨了PHP文件包含漏洞,该漏洞让攻击者能执行恶意代码或访问敏感信息。文章分为三部分:原理、影响和防范。文件包含函数(如`include`和`require`)在攻击者控制文件名时可能导致漏洞。影响包括执行恶意代码、泄露敏感信息和影响服务器性能。防范措施包括验证文件名安全性、使用安全包含函数、设置安全包含路径和参数,以及定期更新和维护代码及库。开发者应重视此问题,采取相应措施保障应用安全。
|
1月前
|
安全 PHP 开发工具
php代码加密 php-screw-plus
php代码加密 php-screw-plus
26 0
|
1月前
|
算法 PHP 数据安全/隐私保护
【实战】PHP代码逆向工具,轻松还原goto加密语句的神器!
`goto解密工具`是一款针对PHP的在线神器,能有效解密和还原goto加密代码,提升代码可读性和可维护性。支持单文件及50M压缩包一键解密,提供全效解决方案。通过实际案例展示了解密报错和理解复杂代码的能力,是PHP开发者解决goto难题的得力助手。立即体验:[在线PHP解密大师](https://copy.kaidala.com/dala/goto/index.html)。
28 1