免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 734 | 回复: 0
打印 上一主题 下一主题

文件上传类 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-16 14:30 |只看该作者 |倒序浏览


?php
/**
* 作用:文件上传类
* 时间:2006-8-20
* 作者:欣然随风
* 参数:
* @file_input    -- 表单上传框名称
* @file_max    -- 上传最大容量(KB)
* @file_path    -- 上传路径 例:d:/aa/bb/../../cc/ 或 d:/aa/bb/cc/,以"/"结束
* @file_type    -- 允许类型 例:$file_type = array('jpg','gif')
* @file_name    -- 上传后重命名称(不含扩展名)
* @file_no        -- 当目录不存在时是否生成
* @file_del    -- 开启后将在file_path下执行同名文件删除,删除类型包括file_type
*/
class class_upfile
{
    public $file_ream;    // 返回真实扩展名
    public $err;        // 返回报告
    public $off;        // 返回状态
    function __construct($file_input,$file_max,$file_path,$file_type,$file_name,$file_no=false,$file_del=false)
    {
        $this->file_input    = $file_input;
        $this->file_max        = $file_max;
        $this->file_path    = $file_path;
        $this->file_type    = $file_type;
        $this->file_name    = $file_name;
        $this->file_no        = $file_no;
        $this->file_del        = $file_del;
        $this->check();
        if($this->off)
        {
            if($_FILES[$this->file_input]['error'] == 0)
            {
                if($this->file_del)
                {
                    foreach($this->file_type AS $v)
                    {
                        $name = $this->file_path.$this->file_name.'.'.$v;
                        if(is_file($name)) unlink($name);
                    }
                }
                $newfile = $this->file_path.$this->file_name.$this->file_ream;
                $this->off = move_uploaded_file($_FILES[$this->file_input]['tmp_name'],$newfile);
                if($this->off)
                {
                    chmod($newfile,0777);
                    $this->err = '文件上传成功!';
                }else $this->err = '文件上传失败,请重试!';
            }
        }
    }
    /**
     * 方法:检测
     */
    function check()
    {
        // 是否为空
        if($_FILES[$this->file_input]['size'] == 0)
        {
            $this->err = '请选择上传文件!';
            return $this->off = false;
        }
        // 检查文件大小
        $file_size = $this->file_max * 1024;    // 转为系统默认的字节
        if($_FILES[$this->file_input]['size'] > $file_size)
        {
            $this->err = '文件大小不得超过'.$this->file_max.'K!';
            return $this->off = false;
        }
        // 检查文件类型
        switch($_FILES[$this->file_input]['type'])
        {
            case 'image/pjpeg':                        $this->file_ream='jpg'; break;
            case 'image/gif':                        $this->file_ream='gif'; break;
            case 'text/plain':                        $this->file_ream='txt'; break;
            case 'application/msword':                $this->file_ream='doc'; break;
            case 'application/x-shockwave-flash':    $this->file_ream='swf'; break;
            case 'application/octet-stream':        $this->file_ream='fla'; break;
            case 'application/octet-stream':        $this->file_ream='rar'; break;
            case 'application/x-zip-compressed':    $this->file_ream='zip'; break;
            case 'application/octet-stream':        $this->file_ream='psd'; break;
        }
        if(!in_array($this->file_ream,$this->file_type))
        {
            $this->err = '此文件格式不支持!';
            return $this->off = false;
        }
        // 检查上传路径
        $this->file_path = $this->factpath($this->file_path);
        if(!is_dir($this->file_path))
        {
            if(!$this->file_no)
            {
                $this->err = '上传路径错误!';
                return $this->off = false;
            }else $this->_mkdirs($this->file_path);
        }
        $this->file_ream = '.'.$this->file_ream;
        return $this->off = true;
    }
    /**
     * 方法:换算实际路径
     */
    function factpath($path)
    {
        $adir = explode('/',$path);
        for($i=0;$icount($adir);$i++)
        {
            $key = false;
            if($adir[$i] == '..') $key = $i;
            if($key !== false)
            {
                for($j=0;$jcount($adir);$j++)
                {
                    if($j==$key-1 || $j==$key) continue;
                    $newadir[] = $adir[$j];
                }
                $adir = $newadir;
                $newadir = false;
                $i=$i-2;
            }
        }
        return $path = implode('/',$adir);
    }
    /**
     * 方法:按指定路径生成目录
     */
    function _mkdirs($path)
    {
        $adir = explode('/',$path);
        $dirlist = '';
        $rootdir = array_shift($adir);
        if(!file_exists($rootdir))
            mkdir($rootdir);
        foreach($adir as $val)
        {
             $dirlist .= '/'.$val;
             $dirpath = $rootdir.$dirlist;
             if(!file_exists($dirpath))
             {
                 mkdir($dirpath);
                 chmod($dirpath,0777);
             }
        }
    }
}//class end
?>


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/12228/showart_259926.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP