加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

一个完美php文件上传类利用实例

发布时间:2023-06-08 13:06:02 所属栏目:PHP教程 来源:
导读:这个文件上传类可以自定上传文件大小与上传文件类型及文件保存地址,使用起来也大兴非常的方法,有一个文就是如果是中文文件名是上传会是乱码,所以大家解决办法就是把页面保存成uft8即可解决.因为写毕设论文写累了所以

这个文件上传类可以自定上传文件大小与上传文件类型及文件保存地址,使用起来也大兴非常的方法,有一个文就是如果是中文文件名是上传会是乱码,所以大家解决办法就是把页面保存成uft8即可解决.

因为写毕设论文写累了所以就发表一篇关于上传文件类的东东吧,这个类也是自己写的,不知道对大家有没有用,如果觉得可以就拿去用吧,不过在编码上面还是没做好,自己是在utf8的页面将数据进行提交的,所以生成的文件如果保持原来的中文名字的话在文件夹中看到就是乱码的名字,如果不想出现乱码的话需要进行一下编码的转换,代码如下:

<?php 

define('NO_FILE', '不存在上传文件'); 

define('NOT_ALLOW_EXT', '文件类型不在允许范围内'); 

define('NOT_ALLOW_SIZE', '文件大小不在允许范围内'); 

define('HAS_THE_FILE', '该文件已经存在'); 

define('UPLOAD_FAILED', '上传失败'); 

define('UPLOAD_SUCCESS', '上传成功'); 

class file_uploader 

    var $_file; 

    var $_filesize; 

    var $_fileext; 

    var $_filedir; 

    var $_filename; 

    var $_filetmpname; 

    var $allowsize; 

    var $allowext; 

    var $neednewname; 

    var $newname; 

    var $syslang; 

    var $report; 

    function ready($filedir = '', $file, $allowsize = '', $allowext = '', $neednewname = false, $report = 0){ 

        $this->_filedir = is_dir($filedir) ? $filedir : ''; 

        if(emptyempty($file) || !isset($file['size']) || $file['size'] == 0) $this->error(NO_FILE); 

        $this->_filesize = $file['size']; 

        $this->_filename = $file['name']; 

        $this->_filetmpname = $file['tmp_name']; 

        $this->allowsize = $allowsize; 

        $this->allowext = $allowext; 

        $this->neednewname = ($neednewname) ? true : false; 

        $this->newname = ''; 

        $this->report = $report; 

    } 

    function do_upload(){ 

        if(!is_uploaded_file($this->_filetmpname)) $this->error(NO_FILE); 

        if($this->chk_ext()){ 

            $this->error(NOT_ALLOW_EXT); 

            return ''; 

        } 

        if($this->chk_size()){ 

            $this->error(NOT_ALLOW_SIZE); 

            return ''; 

        } 

        if($this->neednewname) $this->newname = $this->generate_name().".".$this->get_fileext(); 

        if($this->chk_hasfile()){ 

            $this->error(HAS_THE_FILE); 

            return ''; 

        } 

        $filename = emptyempty($this->newname) ? @iconv('utf-8','gb2312',$this->_filename) : $this->newname; 

        @chmod($this->_filedir.$filename, 0777); 

        if(move_uploaded_file($this->_filetmpname, $this->_filedir.$filename)){ 

            return $this->result(); 

        }else{ 

            $this->error(UPLOAD_FAILED); 

       return ''; 

        } 

    } 

    function chk_ext(){ 

        if(emptyempty($this->allowext) || in_array($this->get_fileext(), explode("|",$this->allowext))) return false; 

        return true; 

    } 

    function chk_size(){ 

        if(emptyempty($this->allowsize) || get_filesize <= $this->allowsize*1024*1024) return false; 

        return true; 

    } 

    function get_filesize(){ 

        return $this->_filesize; 

    } 

    function get_fileext(){ 

        return substr($this->_filename,strrpos($this->_filename,".")+1); 

    } 

    function generate_name(){ 

        return substr(md5(time()),26); 

    } 

    function chk_hasfile(){ 

        return is_file($this->_filedir.$this->_filename); 

    } 

    function error($tip){ 

        echo $tip; 

    } 

    function result(){ 

        if($this->report){ 

            $filename = emptyempty($this->newname) ? $this->_filename : $this->newname; 

            $arr = array('filename' => $filename, 'filesize' => $this->_filesize, 'tip' => UPLOAD_SUCCESS); 

            return $arr; 

        }else{ 

            return UPLOAD_SUCCESS; 

        } 

    } 

/***使用方法与参数说明***/ 

/*** 

    第一个参数$dir 为上传文件存放的路径 

    第二个参数为$_FILES 为你那个上传文件变量 

    第三个参数允许文件大小 单位为MB 

    第四个参数允许的文件类型 格式为jpg|png|gif 

    第五个参数是否需要生成新的文件名 

    第六个参数为返回的提示格式 0为直接提示上传正确 1则返回一个数组array('filename' => $filename, 'filesize' => $this->_filesize, 'tip' => UPLOAD_SUCCESS); 

***/ 

//require("类文件"); 

//$u = new file_uploader; 

//$u->ready($dir, $_FILES['upload_file'], false, false, true, 0); 

//echo $u->do_upload(); 

?> 

随便说下这个类怎样调用吧,方法很简单,代码如下:

$dir = 'upload/'; 

require("upload_class.php"); 

$u = new file_uploader; 

$u->ready($dir, $_FILES['upload_file'], false, false, true, 0); 

echo $u->do_upload(); 

这里上传文件的操作也是“上传文件就这么简单!”,当然那个$_FILES['upload_file']是对应表单中的file类型的控件的名字,而需不需要在上传后输出提示就看你自己啦,关于参数在代码那里面有详细说明,不过这里也是放出来吧.

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!