龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

php 一个简易的PHP文件上传类(适合与新手学习用)

时间:2014-08-31 11:47来源:网络整理 作者:网络 点击:
分享到:
一个简易的PHP文件上传类(适合与新手学习用) [代码片段(120行)]
<?php
class Test_Upload{

    protected $_uploaded = array();
    protected $_destination;    
    protected $_max = 1024000;
    protected $_messages = array();
    protected $_permited = array(
                                'image/gif',
                                'image/jpeg',
                                'image/pjpeg',
                                'image/png'    
    );
    protected $_renamed = false;

    /**
     * 
     * @param mix $path
     * 
     */
    public function __construct($path){

        if (!is_dir($path) || !is_writable($path)){
            throw new Exception("文件名不可写,或者不是目录!");
        }
        $this->_destination = $path;
        $this->_uploaded = $_FILES;
    }
    /**
     * 移动文件
     * 
     */
    public function move(){

        $filed = current($this->_uploaded);  

        $isOk = $this->checkError($filed['name'], $filed['error']);
        //debug ok
        if ($isOk){
            $sizeOk = $this->checkSize($filed['name'], $filed['size']);
            $typeOk = $this->checkType($filed['name'], $filed['type']);
            if ($sizeOk && $typeOk){

                $success = move_uploaded_file($filed['tmp_name'], $this->_destination.$filed['name']);

                if ($success){
                    $this->_messages[] = $filed['name']."文件上传成功";
                }else {
                    $this->_messages[] = $filed['name']."文件上传失败";
                }
            }

        }
    }
    /**
     * 查询messages数组内容 
     *
     */
    public function getMessages(){
        return $this->_messages;
    }

    /**
     *  检测上传的文件大小
     *  @param mix $string
     *  @param int $size
     */
    public function checkSize($filename, $size){

        if ($size == 0){
            return false;
        }else if ($size > $this->_max){
            $this->_messages[] = "文件超出上传限制大小".$this->getMaxsize();
            return false;
        }else { 
            return true;
        }
    }

    /**
     *  检测上传文件的类型
     *  @param mix $filename
     *  @param mix $type
     */
    protected  function checkType($filename, $type){
        if (!in_array($type, $this->_permited)){
            $this->_messages[] = "该文件类型是不被允许的上传类型";
            return false;
        }else {
            return true;
        }
    }

    /**
     *  获取文件大小
     *  
     */
    public function getMaxsize(){
        return number_format($this->_max / 1024, 1).'KB';
    }

    /**
     * 检测上传错误
     * @param mix $filename
     * @param int $error
     * 
     */
    public function checkError($filename, $error){
        switch ($error){
            case 0 : return true;
            case 1 :
            case 2 : $this->_messages[] = "文件过大!"; return true;
            case 3 : $this->_messages[] = "错误上传文件!";return false;
            case 4 : $this->_messages[] = "没有选择文件!"; return false;
            default : $this->_messages[] = "系统错误!"; return false;
        }
    }
}
?>
//该片段来自于http://outofmemory.cn
精彩图集

赞助商链接