PHP文件上传类应用

本文介绍了如何在PHP中实现文件上传并将其路径存储至数据库的过程。包括导入配置、使用upload函数处理上传、检查错误、确保文件大小符合限制、验证文件类型及后缀名、处理删除旧文件操作,并最终将新文件路径存入数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?php 

/**
*   步骤:
*       1.导入inlcude本类文件,如下函数upload 配置存储路径
*       2.直接运用,配合前台,运行函数,注意前台form打开enctype
*       3.若运行成功,转运文件至指定目录,获得返回值url物理全路径
*       4.把指定存储的路径存入数据库
*/



    /**
    *   文件上传函数,把文件保存到指定路径
    *   @param 
    *       $filename:表单里写的文件名称 name="XXX" ,会自动识别$_FILES
    *   @return 成功返回图片存储物理全路径,失败返回false
    */
    function upload($filename){
        include_once(__ROOT__.'/common/Upload.class.php');//引入类文件
        $path  = __ROOT__."/public/upload/".date("Y-m-d",time());//定义路径
        $upload = new upload($filename,$path);//实例化对象
        $url  = $upload->uploadFile();//调用成员方法,成功返回保存的物理地址
        if(empty($url)){
            return false;
        }
        return $url;
    }

/**
    *   修改会员信息
    *   @param $id 哪位会员 $data修改的值[数组形式]
    *   @return 成功返回影响行数 ;失败返回false
    */
    function update_user($id,$data){
        $info = get_user($id);//查询出此友情链接的信息
        //判断有删除图片操作,清空图片地址
        if(@$data['del_pic']){
            unlink(__ROOT__.'/public/'.$info['user_img']);
            unset($data['del_pic']);
            $data['user_img'] = " ";
        }
        if(!empty($_FILES['user_img']['name'])){
            @unlink(__ROOT__."/public/".$info['user_img']);//先删除原来文件exit;
            $url = upload('user_img');//移动文件
            if($url === false){
                return false;
            }
            $data['user_img'] = strstr($url,"upload");//赋新地址值
        }


        $user = M('cms_user');

        $data['password'] = md6($data['password'] );
        $where = " user_id = $id ";
        $re = $user->where($where)->data($data)->update();
        // echo $link->getLastSql();exit;
        if($re){
            return true;
        }
        return false;
    }

//--------------------------以上为类的应用方法----------------------
//------------------------------类开始-----------------------------
    class Upload{
        protected $fileName;   //文件名称
        protected $maxSize;  //文件最大大小
        protected $allowMime; //允许的图片范围
        protected $allowExt;   //允许的文件后缀名
        protected $uploadPath; //设置文件上传路径
        protected $imgFlag;        //是否开启检测真实图像
        protected $fileInfo;   
        protected $error;//返回的文件错误
        protected $ext; //获取的文件后缀

        public function __construct($fileName='myFile',$uploadPath='./uploads',$imgFlag=true,$maxSize=5242880,$allowExt=array('jpeg','jpg','png','gif'),$allowMime=array('image/jpeg','image/png','image/gif')){
            $this->fileName=$fileName;
            $this->maxSize=$maxSize;
            $this->allowMime=$allowMime;
            $this->allowExt=$allowExt;
            $this->uploadPath=$uploadPath;
            $this->imgFlag=$imgFlag;
            $this->fileInfo=$_FILES[$this->fileName];
        }
        /**
         * 检测上传文件是否出错
         * @return boolean
         */
        protected function checkError(){
            if(!is_null($this->fileInfo)){
                if($this->fileInfo['error']>0){
                    switch($this->fileInfo['error']){
                        case 1:
                            $this->error='超过了PHP配置文件中upload_max_filesize选项的值';
                            break;
                        case 2:
                            $this->error='超过了表单中MAX_FILE_SIZE设置的值';
                            break;
                        case 3:
                            $this->error='文件部分被上传';
                            break;
                        case 4:
                            $this->error='没有选择上传文件';
                            break;
                        case 6:
                            $this->error='没有找到临时目录';
                            break;
                        case 7:
                            $this->error='文件不可写';
                            break;
                        case 8:
                            $this->error='由于PHP的扩展程序中断文件上传';
                            break;

                    }
                    return false;
                }else{
                    return true;
                }
            }else{
                $this->error='文件上传出错';
                return false;
            }
        }
        /**
         * 检测上传文件的大小
         * @return boolean
         */
        protected function checkSize(){
            if($this->fileInfo['size']>$this->maxSize){
                $this->error='上传文件过大';
                return false;
            }
            return true;
        }
        /**
         * 检测扩展名s
         * @return boolean
         */
        protected function checkExt(){
            $this->ext=strtolower(pathinfo($this->fileInfo['name'],PATHINFO_EXTENSION));
            if(!in_array($this->ext,$this->allowExt)){
                $this->error='不允许的扩展名';
                return false;
            }
            return true;
        }
        /**
         * 检测文件的类型
         * @return boolean
         */
        protected function checkMime(){
            if(!in_array($this->fileInfo['type'],$this->allowMime)){
                $this->error='不允许的文件类型';
                return false;
            }
            return true;
        }
        /**
         * 检测是否是真实图片
         * @return boolean
         */
        protected function checkTrueImg(){
            if($this->imgFlag){
                if(!@getimagesize($this->fileInfo['tmp_name'])){
                    $this->error='不是真实图片';
                    return false;
                }
                return true;
            }
        }
        /**
         * 检测是否通过HTTP POST方式上传上来的
         * @return boolean
         */
        protected function checkHTTPPost(){
            if(!is_uploaded_file($this->fileInfo['tmp_name'])){
                $this->error='文件不是通过HTTP POST方式上传上来的';
                return false;
            }
            return true;
        }
        /**
         *显示错误 
         */
        protected function showError(){
            exit('<span style="color:red">'.$this->error.'</span>');
        }
        /**
         * 检测目录不存在则创建
         */
        protected function checkUploadPath(){
            if(!file_exists($this->uploadPath)){
                mkdir($this->uploadPath,0777,true);
            }
        }
        /**
         * 产生唯一字符串
         * @return string
         */
        protected function getUniName(){
            return md5(uniqid(microtime(true),true));
        }
        /**
         * 上传文件
         * @return string
         */
        public function uploadFile(){
            if($this->checkError()&&$this->checkSize()&&$this->checkExt()&&$this->checkMime()&&$this->checkTrueImg()&&$this->checkHTTPPost()){
                $this->checkUploadPath();
                $this->uniName=$this->getUniName();
                $this->destination=$this->uploadPath.'/'.$this->uniName.'.'.$this->ext;
                if(@move_uploaded_file($this->fileInfo['tmp_name'], $this->destination)){
                    return  $this->destination;
                }else{
                    $this->error='文件移动失败';
                    $this->showError();
                }
            }else{
                $this->showError();
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值