设计文件上传功能时,不仅要考虑上传文件的大小,有时还要考虑上传文件的类型,针对不同的需要对上传文件的类型加以限制,这里指的文件类型可以通过文件的扩展名来判断。例如,在上传涉及文本说明性文字时,最好将上传的文件限制为以“.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循环输出数组中的元素值,将输出的元素值与获取的文件后缀进行比较,进而判断其是否符合要求。