限制上传文件大小

课后整理 2021-1-7

在网站开发的过程中,为了确保充分地利用服务器的空间,在开发上传功能时最好能够对上传文件的大小进行控制。本例开发的上传功能就可以对上传文件的大小进行控制。如果上传文件的大小超过指定范困,那么将给出提示信息,并终止上传。运行结果如图11.22所示。

图11.22 限制上传文件大小

【操作步骤】

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

<form action=""  method="post" enctype="multipart/form-data">
    <p>选择上传文件:<input type="file" name="up_picture">
       <input type="hidden"  name="MAX_FILE_SIZE" value="10"> </p>
    <p>上传文件大小为(2M)</p>
    <p><input type="reset"  value="重置">  <input type="submit" value="提交"></p>
</form>

第2步,通过S_FILES获取上传文件的相关信息,通过move_uploaded_file()函数完成图片的上传。

<?php
if(!empty($_FILES['up_picture']['name'])){         //判断上传内容是否为空
    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']."不合法!";
        }
    }
}
?>

控制上传文件的大小有两个关键点:一是PHP的配置文件php.ini对上传文件的控制,如果上传文件的大小超过其指定的范围,那么上传就会失败;二是在PHP配置文件允许的范围内,在程序中对上传文件大小的控制。

第1点,在PHP中,通过php.ini文件对上传文件进行控制,包括是否支持上传、上传文件的临时目录、上传文件的大小、指令执行的时间、指令分配的内存空间。

在php.ini文件中,定义到File Uploads项,完成对上传相关选项的设置。上传相关选项的含义如下:

上述是php.ini文件的File Uploads项中与上传相关选项参数的设置说明,除了File Uploads项中的内容外,在php.ini文件中还有几个选项会影响到文件的上传。

第2点,在客户端控制上传文件,应用的是form表单中的enctype和method属性,以及隐藏域MAX_FILE_SIZE。

上述两种判断的结果都可以通过全局变最$_FILES的返回值来体现。$_FILES是一个数组,包含所有上传文件的信息。下面介绍$_FILES数组中每个元素的含义: