0

0

使用php的图片上传类进行图片上传,总是提示:上传文件时出错 : 未允许类型 。都是默认的配置

php中文网

php中文网

发布时间:2016-06-06 20:24:54

|

1858人浏览过

|

来源于php中文网

原创

使用php的图片上传类进行图片上传,总是提示:上传文件时出错 : 未允许类型 。都是默认的配置

 $uploadImg= new FileUpload;
                  if($uploadImg ->upload("head")){
                    echo '
';
                    var_dump($uploadImg ->getFileName());
                    echo '
'; }else{ echo '
';
                    var_dump($uploadImg ->getErrorMsg());
                    echo '
'; }
                  setOption($key, $val);
            }
            return $this;
        }

        /**
         * 调用该方法上传文件
         * @param    string    $fileFile    上传文件的表单名称 
         * @return    bool                 如果上传成功返回数true 
         */
        
        function upload($fileField) {
            $return = true;
            /* 检查文件路径是滞合法 */
            if( !$this->checkFilePath() ) {                
                $this->errorMess = $this->getError();
                return false;
            }
            /* 将文件上传的信息取出赋给变量 */
            $name = $_FILES[$fileField]['name'];
            $tmp_name = $_FILES[$fileField]['tmp_name'];
            $size = $_FILES[$fileField]['size'];
            $error = $_FILES[$fileField]['error'];

            /* 如果是多个文件上传则$file["name"]会是一个数组 */
            if(is_Array($name)){          
                $errors=array();
                /*多个文件上传则循环处理 , 这个循环只有检查上传文件的作用,并没有真正上传 */
                for($i = 0; $i < count($name); $i++){ 
                    /*设置文件信息 */
                    if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i] )) {
                        if(!$this->checkFileSize() || !$this->checkFileType()){
                            $errors[] = $this->getError();
                            $return=false;    
                        }
                    }else{
                        $errors[] = $this->getError();
                        $return=false;
                    }
                    /* 如果有问题,则重新初使化属性 */
                    if(!$return)                      
                        $this->setFiles();
                }
            
                if($return){
                    /* 存放所有上传后文件名的变量数组 */
                    $fileNames = array();               
                    /* 如果上传的多个文件都是合法的,则通过销魂循环向服务器上传文件 */
                    for($i = 0; $i < count($name);  $i++){ 
                        if($this->setFiles($name[$i], $tmp_name[$i], $size[$i], $error[$i] )) {
                            $this->setNewFileName(); 
                            if(!$this->copyFile()){
                                $errors[] = $this->getError();
                                $return = false;
                            }
                            $fileNames[] = $this->newFileName;    
                        }                    
                    }
                    $this->newFileName = $fileNames;
                }
                $this->errorMess = $errors;
                return $return;
            /*上传单个文件处理方法*/
            } else {
                /* 设置文件信息 */
                if($this->setFiles($name,$tmp_name,$size,$error)) {
                    /* 上传之前先检查一下大小和类型 */
                    if($this->checkFileSize() && $this->checkFileType()){    
                        /* 为上传文件设置新文件名 */
                        $this->setNewFileName(); 
                        /* 上传文件   返回0为成功, 小于0都为错误 */
                        if($this->copyFile()){ 
                            return true;
                        }else{
                            $return=false;
                        }
                    }else{
                        $return=false;
                    }
                } else {
                    $return=false;    
                }
                //如果$return为false, 则出错,将错误信息保存在属性errorMess中
                if(!$return)
                    $this->errorMess=$this->getError();   

                return $return;
            }
        }

        /** 
         * 获取上传后的文件名称
         * @param    void     没有参数
         * @return    string     上传后,新文件的名称, 如果是多文件上传返回数组
         */
        public function getFileName(){
            return $this->newFileName;
        }

        /**
         * 上传失败后,调用该方法则返回,上传出错信息
         * @param    void     没有参数
         * @return    string      返回上传文件出错的信息报告,如果是多文件上传返回数组
         */
        public function getErrorMsg(){
            return $this->errorMess;
        }
        
        /* 设置上传出错信息 */
        private function getError() {
            $str = "上传文件{$this->originName}时出错 : ";
            switch ($this->errorNum) {
                case 4: $str .= "没有文件被上传"; break;
                case 3: $str .= "文件只有部分被上传"; break;
                case 2: $str .= "上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值"; break;
                case 1: $str .= "上传的文件超过了php.ini中upload_max_filesize选项限制的值"; break;
                case -1: $str .= "未允许类型"; break;
                case -2: $str .= "文件过大,上传的文件不能超过{$this->maxsize}个字节"; break;
                case -3: $str .= "上传失败"; break;
                case -4: $str .= "建立存放上传文件目录失败,请重新指定上传目录"; break;
                case -5: $str .= "必须指定上传文件的路径"; break;
                default: $str .= "未知错误";
            }
            return $str.'
'; } /* 设置和$_FILES有关的内容 */ private function setFiles($name="", $tmp_name="", $size=0, $error=0) { $this->setOption('errorNum', $error); if($error) return false; $this->setOption('originName', $name); $this->setOption('tmpFileName',$tmp_name); $aryStr = explode(".", $name); $this->setOption('fileType', strtolower($aryStr[count($aryStr)-1])); $this->setOption('fileSize', $size); return true; } /* 为单个成员属性设置值 */ private function setOption($key, $val) { $this->$key = $val; } /* 设置上传后的文件名称 */ private function setNewFileName() { if ($this->israndname) { $this->setOption('newFileName', $this->proRandName()); } else{ $this->setOption('newFileName', $this->originName); } } /* 检查上传的文件是否是合法的类型 */ private function checkFileType() { if (in_array(strtolower($this->fileType), $this->allowtype)) { return true; }else { $this->setOption('errorNum', -1); return false; } } /* 检查上传的文件是否是允许的大小 */ private function checkFileSize() { if ($this->fileSize > $this->maxsize) { $this->setOption('errorNum', -2); return false; }else{ return true; } } /* 检查是否有存放上传文件的目录 */ private function checkFilePath() { if(empty($this->path)){ $this->setOption('errorNum', -5); return false; } if (!file_exists($this->path) || !is_writable($this->path)) { if (!@mkdir($this->path, 0755)) { $this->setOption('errorNum', -4); return false; } } return true; } /* 设置随机文件名 */ private function proRandName() { $fileName = date('YmdHis')."_".rand(100,999); return $fileName.'.'.$this->fileType; } /* 复制上传文件到指定的位置 */ private function copyFile() { if(!$this->errorNum) { $path = rtrim($this->path, '/').'/'; $path .= $this->newFileName; if (@move_uploaded_file($this->tmpFileName, $path)) { return true; }else{ $this->setOption('errorNum', -3); return false; } } else { return false; } } }

回复内容:

使用php的图片上传类进行图片上传,总是提示:上传文件时出错 : 未允许类型 。都是默认的配置

 $uploadImg= new FileUpload;
                  if($uploadImg ->upload("head")){
                    echo '
';
                    var_dump($uploadImg ->getFileName());
                    echo '
'; }else{ echo '
';
                    var_dump($uploadImg ->getErrorMsg());
                    echo '
'; }
                  setOption($key, $val);
            }
            return $this;
        }

        /**
         * 调用该方法上传文件
         * @param    string    $fileFile    上传文件的表单名称 
         * @return    bool                 如果上传成功返回数true 
         */
        
        function upload($fileField) {
            $return = true;
            /* 检查文件路径是滞合法 */
            if( !$this->checkFilePath() ) {                
                $this->errorMess = $this->getError();
                return false;
            }
            /* 将文件上传的信息取出赋给变量 */
            $name = $_FILES[$fileField]['name'];
            $tmp_name = $_FILES[$fileField]['tmp_name'];
            $size = $_FILES[$fileField]['size'];
            $error = $_FILES[$fileField]['error'];

            /* 如果是多个文件上传则$file["name"]会是一个数组 */
            if(is_Array($name)){          
                $errors=array();
                /*多个文件上传则循环处理 , 这个循环只有检查上传文件的作用,并没有真正上传 */
                for($i = 0; $i < count($name); $i++){ 
                    /*设置文件信息 */
                    if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i] )) {
                        if(!$this->checkFileSize() || !$this->checkFileType()){
                            $errors[] = $this->getError();
                            $return=false;    
                        }
                    }else{
                        $errors[] = $this->getError();
                        $return=false;
                    }
                    /* 如果有问题,则重新初使化属性 */
                    if(!$return)                      
                        $this->setFiles();
                }
            
                if($return){
                    /* 存放所有上传后文件名的变量数组 */
                    $fileNames = array();               
                    /* 如果上传的多个文件都是合法的,则通过销魂循环向服务器上传文件 */
                    for($i = 0; $i < count($name);  $i++){ 
                        if($this->setFiles($name[$i], $tmp_name[$i], $size[$i], $error[$i] )) {
                            $this->setNewFileName(); 
                            if(!$this->copyFile()){
                                $errors[] = $this->getError();
                                $return = false;
                            }
                            $fileNames[] = $this->newFileName;    
                        }                    
                    }
                    $this->newFileName = $fileNames;
                }
                $this->errorMess = $errors;
                return $return;
            /*上传单个文件处理方法*/
            } else {
                /* 设置文件信息 */
                if($this->setFiles($name,$tmp_name,$size,$error)) {
                    /* 上传之前先检查一下大小和类型 */
                    if($this->checkFileSize() && $this->checkFileType()){    
                        /* 为上传文件设置新文件名 */
                        $this->setNewFileName(); 
                        /* 上传文件   返回0为成功, 小于0都为错误 */
                        if($this->copyFile()){ 
                            return true;
                        }else{
                            $return=false;
                        }
                    }else{
                        $return=false;
                    }
                } else {
                    $return=false;    
                }
                //如果$return为false, 则出错,将错误信息保存在属性errorMess中
                if(!$return)
                    $this->errorMess=$this->getError();   

                return $return;
            }
        }

        /** 
         * 获取上传后的文件名称
         * @param    void     没有参数
         * @return    string     上传后,新文件的名称, 如果是多文件上传返回数组
         */
        public function getFileName(){
            return $this->newFileName;
        }

        /**
         * 上传失败后,调用该方法则返回,上传出错信息
         * @param    void     没有参数
         * @return    string      返回上传文件出错的信息报告,如果是多文件上传返回数组
         */
        public function getErrorMsg(){
            return $this->errorMess;
        }
        
        /* 设置上传出错信息 */
        private function getError() {
            $str = "上传文件{$this->originName}时出错 : ";
            switch ($this->errorNum) {
                case 4: $str .= "没有文件被上传"; break;
                case 3: $str .= "文件只有部分被上传"; break;
                case 2: $str .= "上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值"; break;
                case 1: $str .= "上传的文件超过了php.ini中upload_max_filesize选项限制的值"; break;
                case -1: $str .= "未允许类型"; break;
                case -2: $str .= "文件过大,上传的文件不能超过{$this->maxsize}个字节"; break;
                case -3: $str .= "上传失败"; break;
                case -4: $str .= "建立存放上传文件目录失败,请重新指定上传目录"; break;
                case -5: $str .= "必须指定上传文件的路径"; break;
                default: $str .= "未知错误";
            }
            return $str.'
'; } /* 设置和$_FILES有关的内容 */ private function setFiles($name="", $tmp_name="", $size=0, $error=0) { $this->setOption('errorNum', $error); if($error) return false; $this->setOption('originName', $name); $this->setOption('tmpFileName',$tmp_name); $aryStr = explode(".", $name); $this->setOption('fileType', strtolower($aryStr[count($aryStr)-1])); $this->setOption('fileSize', $size); return true; } /* 为单个成员属性设置值 */ private function setOption($key, $val) { $this->$key = $val; } /* 设置上传后的文件名称 */ private function setNewFileName() { if ($this->israndname) { $this->setOption('newFileName', $this->proRandName()); } else{ $this->setOption('newFileName', $this->originName); } } /* 检查上传的文件是否是合法的类型 */ private function checkFileType() { if (in_array(strtolower($this->fileType), $this->allowtype)) { return true; }else { $this->setOption('errorNum', -1); return false; } } /* 检查上传的文件是否是允许的大小 */ private function checkFileSize() { if ($this->fileSize > $this->maxsize) { $this->setOption('errorNum', -2); return false; }else{ return true; } } /* 检查是否有存放上传文件的目录 */ private function checkFilePath() { if(empty($this->path)){ $this->setOption('errorNum', -5); return false; } if (!file_exists($this->path) || !is_writable($this->path)) { if (!@mkdir($this->path, 0755)) { $this->setOption('errorNum', -4); return false; } } return true; } /* 设置随机文件名 */ private function proRandName() { $fileName = date('YmdHis')."_".rand(100,999); return $fileName.'.'.$this->fileType; } /* 复制上传文件到指定的位置 */ private function copyFile() { if(!$this->errorNum) { $path = rtrim($this->path, '/').'/'; $path .= $this->newFileName; if (@move_uploaded_file($this->tmpFileName, $path)) { return true; }else{ $this->setOption('errorNum', -3); return false; } } else { return false; } } }

问题解决了。在from表单少写了一个data属性

你的$this->fileType 在哪赋值的

你在 new FileUpload 之后没有设置过所允许的文件类型(扩展名),所以默认的为 'jpg','jpeg','gif','png'.

立即学习PHP免费学习笔记(深入)”;

然后你所反馈的出错信息为: 未允许类型, 在代码中对应的是 errorNum 等于 -1 的情况.

使用php的图片上传类进行图片上传,总是提示:上传文件时出错 : 未允许类型 。都是默认的配置

然后查找 设置为 -1 时的代码如下:

使用php的图片上传类进行图片上传,总是提示:上传文件时出错 : 未允许类型 。都是默认的配置

一键职达
一键职达

AI全自动批量代投简历软件,自动浏览招聘网站从海量职位中用AI匹配职位并完成投递的全自动操作,真正实现'一键职达'的便捷体验。

下载

所以结合目前的代码,得出的结论为:你在上传的时候,上传的文件扩展名不在默认允许的范围内.
即: in_array(strtolower($this->fileType), $this->allowtype) 这个条件检测失败.


根据你提供的代码, 本地测试的效果如下:
上传时选择的文件为 QQ截图20151112092309.png
使用php的图片上传类进行图片上传,总是提示:上传文件时出错 : 未允许类型 。都是默认的配置

使用php的图片上传类进行图片上传,总是提示:上传文件时出错 : 未允许类型 。都是默认的配置

上传时选择的文件为 sina.html

使用php的图片上传类进行图片上传,总是提示:上传文件时出错 : 未允许类型 。都是默认的配置

使用php的图片上传类进行图片上传,总是提示:上传文件时出错 : 未允许类型 。都是默认的配置

附完整的测试代码:

setOption($key, $val);
            }
            return $this;
        }

        /**
         * 调用该方法上传文件
         * @param    string    $fileFile    上传文件的表单名称 
         * @return    bool                 如果上传成功返回数true 
         */
        
        function upload($fileField) {
            $return = true;
            /* 检查文件路径是滞合法 */
            if( !$this->checkFilePath() ) {                
                $this->errorMess = $this->getError();
                return false;
            }
            /* 将文件上传的信息取出赋给变量 */
            $name = $_FILES[$fileField]['name'];
            $tmp_name = $_FILES[$fileField]['tmp_name'];
            $size = $_FILES[$fileField]['size'];
            $error = $_FILES[$fileField]['error'];

            /* 如果是多个文件上传则$file["name"]会是一个数组 */
            if(is_Array($name)){          
                $errors=array();
                /*多个文件上传则循环处理 , 这个循环只有检查上传文件的作用,并没有真正上传 */
                for($i = 0; $i < count($name); $i++){ 
                    /*设置文件信息 */
                    if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i] )) {
                        if(!$this->checkFileSize() || !$this->checkFileType()){
                            $errors[] = $this->getError();
                            $return=false;    
                        }
                    }else{
                        $errors[] = $this->getError();
                        $return=false;
                    }
                    /* 如果有问题,则重新初使化属性 */
                    if(!$return)                      
                        $this->setFiles();
                }
            
                if($return){
                    /* 存放所有上传后文件名的变量数组 */
                    $fileNames = array();               
                    /* 如果上传的多个文件都是合法的,则通过销魂循环向服务器上传文件 */
                    for($i = 0; $i < count($name);  $i++){ 
                        if($this->setFiles($name[$i], $tmp_name[$i], $size[$i], $error[$i] )) {
                            $this->setNewFileName(); 
                            if(!$this->copyFile()){
                                $errors[] = $this->getError();
                                $return = false;
                            }
                            $fileNames[] = $this->newFileName;    
                        }                    
                    }
                    $this->newFileName = $fileNames;
                }
                $this->errorMess = $errors;
                return $return;
            /*上传单个文件处理方法*/
            } else {
                /* 设置文件信息 */
                if($this->setFiles($name,$tmp_name,$size,$error)) {
                    /* 上传之前先检查一下大小和类型 */
                    if($this->checkFileSize() && $this->checkFileType()){    
                        /* 为上传文件设置新文件名 */
                        $this->setNewFileName(); 
                        /* 上传文件   返回0为成功, 小于0都为错误 */
                        if($this->copyFile()){ 
                            return true;
                        }else{
                            $return=false;
                        }
                    }else{
                        $return=false;
                    }
                } else {
                    $return=false;    
                }
                //如果$return为false, 则出错,将错误信息保存在属性errorMess中
                if(!$return)
                    $this->errorMess=$this->getError();   

                return $return;
            }
        }

        /** 
         * 获取上传后的文件名称
         * @param    void     没有参数
         * @return    string     上传后,新文件的名称, 如果是多文件上传返回数组
         */
        public function getFileName(){
            return $this->newFileName;
        }

        /**
         * 上传失败后,调用该方法则返回,上传出错信息
         * @param    void     没有参数
         * @return    string      返回上传文件出错的信息报告,如果是多文件上传返回数组
         */
        public function getErrorMsg(){
            return $this->errorMess;
        }
        
        /* 设置上传出错信息 */
        private function getError() {
            $str = "上传文件{$this->originName}时出错 : ";
            switch ($this->errorNum) {
                case 4: $str .= "没有文件被上传"; break;
                case 3: $str .= "文件只有部分被上传"; break;
                case 2: $str .= "上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值"; break;
                case 1: $str .= "上传的文件超过了php.ini中upload_max_filesize选项限制的值"; break;
                case -1: $str .= "未允许类型"; break;
                case -2: $str .= "文件过大,上传的文件不能超过{$this->maxsize}个字节"; break;
                case -3: $str .= "上传失败"; break;
                case -4: $str .= "建立存放上传文件目录失败,请重新指定上传目录"; break;
                case -5: $str .= "必须指定上传文件的路径"; break;
                default: $str .= "未知错误";
            }
            return $str.'
'; } /* 设置和$_FILES有关的内容 */ private function setFiles($name="", $tmp_name="", $size=0, $error=0) { $this->setOption('errorNum', $error); if($error) return false; $this->setOption('originName', $name); $this->setOption('tmpFileName',$tmp_name); $aryStr = explode(".", $name); $this->setOption('fileType', strtolower($aryStr[count($aryStr)-1])); $this->setOption('fileSize', $size); return true; } /* 为单个成员属性设置值 */ private function setOption($key, $val) { $this->$key = $val; } /* 设置上传后的文件名称 */ private function setNewFileName() { if ($this->israndname) { $this->setOption('newFileName', $this->proRandName()); } else{ $this->setOption('newFileName', $this->originName); } } /* 检查上传的文件是否是合法的类型 */ private function checkFileType() { if (in_array(strtolower($this->fileType), $this->allowtype)) { return true; }else { $this->setOption('errorNum', -1); return false; } } /* 检查上传的文件是否是允许的大小 */ private function checkFileSize() { if ($this->fileSize > $this->maxsize) { $this->setOption('errorNum', -2); return false; }else{ return true; } } /* 检查是否有存放上传文件的目录 */ private function checkFilePath() { if(empty($this->path)){ $this->setOption('errorNum', -5); return false; } if (!file_exists($this->path) || !is_writable($this->path)) { if (!@mkdir($this->path, 0755)) { $this->setOption('errorNum', -4); return false; } } return true; } /* 设置随机文件名 */ private function proRandName() { $fileName = date('YmdHis')."_".rand(100,999); return $fileName.'.'.$this->fileType; } /* 复制上传文件到指定的位置 */ private function copyFile() { if(!$this->errorNum) { $path = rtrim($this->path, '/').'/'; $path .= $this->newFileName; if (@move_uploaded_file($this->tmpFileName, $path)) { return true; }else{ $this->setOption('errorNum', -3); return false; } } else { return false; } } } if(isset($_GET['upload'])){ $uploadImg= new FileUpload; if($uploadImg->upload("head")){ echo '
';
        var_dump($uploadImg ->getFileName());
        echo '
'; }else{ echo '
';
        var_dump($uploadImg ->getErrorMsg());
        echo '
'; } } ?>

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

10

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

29

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

13

2026.01.22

PHP特殊符号教程合集
PHP特殊符号教程合集

本专题整合了PHP特殊符号相关处理方法,阅读专题下面的文章了解更多详细内容。

11

2026.01.22

PHP探针相关教程合集
PHP探针相关教程合集

本专题整合了PHP探针相关教程,阅读专题下面的文章了解更多详细内容。

8

2026.01.22

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

55

2026.01.22

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

9

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 9.2万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 10.4万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号