老师你好,我根据你讲解的代码编写后,封装上传文件对象后,上传文件总是报文件扩展类型错误,调试后fileInfo信息位NULL

来源:3-7 调试和验证

yufan507

2016-03-18 15:59

<?php
/**
* Created by PhpStorm.
* User: andin
* Date: 16-3-18
* Time: 上午9:29
*/
class upload{
   protected $fileName;
   protected $maxSize;
   protected $allowMime;
   protected $allowExt;
   protected $uploadPath;
   protected $imgFlag;
   protected $fileInfo;
   protected $error;
   protected $ext;

   /**
    * @param string $fileName
    * @param string $uploadPath
    * @param int $maxSize
    * @param bool $imgFlag
    * @param array $allowMime
    * @param array $allowExt
    */
   public function _construct($fileName='myfile',$uploadPath='./upload',$maxSize=5242880,$imgFlag=true,$allowMime=array('image/jpeg','image/png','image/gif','image/jpg'),$allowExt=array('jpg','jpeg','txt','png','gif','bmp')){
       $this->fileName=$fileName;
       $this->maxSize=$maxSize;
       $this->allowMime=$allowMime;
       $this->allowExt=$allowExt;
       $this->uploadPath=$uploadPath;
       $this->imgFlag=$imgFlag;
       $this->fileInfo=$_FILES[$this->fileName];
   }

   /**
    * 检测是否出错
    * @return bool
    */
   protected function checkError(){

       //if(!is_null($this->fileInfo)) {



           if ($this->fileInfo['error'] > 0) {
               switch ($this->fileInfo['error']) {
                   case 1:
                       $this->error = '超过了php配置文件中upload选项的值';
                       break;
                   case 2:
                       $this->error = '超过了表单中的限制';
                       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 {
               //echo 'aa';
               return true;
           }
       //} else{
       //        $this->error='文件上传错误';
       //        return false;
        //   }

   }


   /**
    * 检测上传文件大小
    * @return bool
    */
   protected function checkSize(){
       if($this->fileInfo['size']>$this->maxSize){
           $this->error='上传文件过大';
           return false;
       }
       return true;
   }

   /**
    *检测扩展名
    * @return bool
    */
   protected function checkExt(){
      // $this->ext=strtolower(pathinfo($this->fileInfo['name'],PATHINFO_EXTENSION));
       $this->ext=strtolower(pathinfo($this->fileInfo['name'],PATHINFO_EXTENSION));
       echo 'bb';
       //var_dump($this->fileInfo['name']);
       var_dump($this->ext);
       if(!in_array($this->ext,$this->allowExt)){
           $this->error='不允许的扩展名';
           return false;
       }
       return true;
   }

   /**
    * 检测文件类型
    * @return bool
    */

   protected function checkMime(){
       if(!in_array($this->fileInfo['type'],$this->allowMime)){
           $this->error='不允许的文件类型';
           return false;
       }
       return true;
   }

   /**
    * 检测图片是否真实
    * @return bool
    */
   protected function checkTrueImg(){
       if($this->imgFlag){
           if(!@getimagesize($this->fileInfo['tmp_name'])){
               $this->error='不是真实的图片';
               return false;
           }
           return true;
       }
   }

   /**
    * 检测文件是否通过http post方式上传
    * @return bool
    */
   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 loadFile(){
       var_dump($this->fileInfo['name']);
       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();
       }
   }






}http://img.mukewang.com/56ebb54900011b3614400900.jpg

写回答 关注

1回答

  • 正义之手
    2016-03-27 11:06:31

    你视频没有看完吧?

PHP实现文件上传与下载

本课程讲解了文件上传的原理和配置,学会两种方式实现文件上传与下载

43735 学习 · 328 问题

查看课程

相似问题