限制上传文件类型

课后整理 2021-1-7

设计文件上传功能时,不仅要考虑上传文件的大小,有时还要考虑上传文件的类型,针对不同的需要对上传文件的类型加以限制,这里指的文件类型可以通过文件的扩展名来判断。例如,在上传涉及文本说明性文字时,最好将上传的文件限制为以“.txt”为后缀的文本格式。本例限制用户仅能够上传文本文件,运行结果如图11.23所示。

图11.23 限制上传文件类型

【操作步骤】

第1步,创建index.php文件。为index.php文件添加表单,设置enctype属性值为"multipart/form-data",添加文件域,用POST方法将表单中数据提交到本页。

<form  action="index.php" method="post"  enctype="multipart/form-data">
    <p>选择上传文件:<input type="file" name="up_picture">
    <input type="hidden"  name="MAX_FILE_SIZE" value="10000"></p>
    <p>上传文件类型为(.txt)
    <p><input type="reset"  value="重置">  <input type="submit" value="提交"></p>
</form>

第2步,通过S_FILES获取上传文件的相关信息,通过move_uploaded_file()函数完成图片的上传。继续使用上节示例内容,在其基础上增加对上传文件类型的判断。

<?php
if(!empty($_FILES['up_picture']['name'])){         //判断上传内容是否为空
    $type=$_FILES['up_picture']['name'];
    $types=strstr($type,'.');
    if($types==".txt"){
        if($_FILES['up_picture']['error']>0){        //判断文件是否可以上传到服务器
            echo "上传错误:";
             switch($_FILES['up_picture']['error']){
                case 1:
                    echo "上传文件大小超出配置文件规定值";
                break;
                case 2:
                    echo "上传文件大小超出表单中约定值";
                break;
                case 3:
                    echo "上传文件不全";
                break;
                case 4:
                    echo "没有上传文件";
                break;    
            }
        }else{
            if(!is_dir("./upfile/")){    //判断指定目录是否存在
                mkdir("./upfile/");   //创建目录
            }
            $path='./upfile/'.time().strstr($_FILES['up_picture']['name'],'.');//定义上传文件存储位置
            if(is_uploaded_file($_FILES['up_picture']['tmp_name'])){  //判断是否是HTPP POST上传
                if(!move_uploaded_file($_FILES['up_picture']['tmp_name'],$path)){  //执行上传操作
                    echo "上传失败";
                }else{
                    echo "文件".$_FILES['up_picture']['name']."上传成功,大小为:".$_FILES['up_picture']['size'];    
                }
            }else{
                echo "上传文件".$_FILES['up_pictute']['name']."不合法!";
            }
        }
    }else{
        echo "上传文件".$_FILES['up_picture']['name']."类型不正确!";
    }
}
?>

文件的上传和对大小的限制已经在前面的实例中讲解过,这里只讲解限制上传文件类型的关键技术,首先要通过预定义全局变量$_FILES中的$_FILES['up_picture']['name'].获取上传文件的名称,然后应用strstr()函数截取上传文件名称的后缀,最后判断上传文件的后缀是否符合要求。

判断上传的文件是否符合多种类型中的一种,最佳的方法就是将多种类型定义到一个数组中,然后通过for循环输出数组中的元素值,将输出的元素值与获取的文件后缀进行比较,进而判断其是否符合要求。