文章教程

3.1.5PHP中的文件上传处理

9/17/2020 9:26:54 PM 人评论 次浏览

3.1.5 PHP中的文件上传处理

在Web开发中,经常会遇到从客户端上传文件到服务器端的问题。通常,文件上传使用的是HTTP的POST方式,使用POST方式传递文件到服务器端。要完成文件上传处理,首先要定义HTML表单的enctype属性为"multipart/form-data",如以下代码所示。


<form enctype="multipart/form-data"action="somefile.php"method="POST">


只有这样的表单,才能确保文件可以提交并上传。其中,somefile.php要替换为一个可以处理文件上传的真实PHP文件。代码3-6是一个支持文件上传的表单示例,该表单将一个文件提交至3-7.php进行处理,稍后完成3-7.php程序。

代码3-6 支持文件上传的HTML表单3-6.html


01 <html>

02 <head><title>3-6支持文件上传的表单</title></head>

03 <body>

04

05 <!--表单的enctype属性必须指定为multipart/form-data-->

06 <form enctype="multipart/form-data"action="3-7.php"method="POST">

07 <!--input的type属性指定为file,name属性的值将会在PHP程序的$_FILES数组中用到-->

08 上传此文件:<input name="myfile"type="file"/>

09 <input type="submit"value="提交上传"/>

10 </form>

11

12 </body>

13 </html>


【代码解析】第6行使用enctype指定了multipart/form-data属性。第8行是一个HTML控件input,其类型为file,表示这是一个文件上传控件。

浏览3-6.html,看到如图3-8所示的效果。该页面会生成一个“浏览”按钮,通过它可以选择客户端文件。

图 3-8 支持文件上传到表单

在PHP程序中,使用全局变量$_FILES处理文件上传。$_FILES是一个数组,包含了要上传的文件的信息。下面以上述HTML表单为例,介绍$_FILES数组的内容。

❑$_FILES['myfile']['name']表示客户端文件的原始名称,即要上传的文件的文件名。其中myfile就是在代码3-6中定义的input元素的name属性的值:<input name="myfile"type="file"/>。

❑$_FILES['myfile']['type']表示上传文件的类型,例如“image/gif”。

❑$_FILES['myfile']['size']表示已上传文件的大小,单位为字节。

❑$_FILES['myfile']['tmp_name']表示文件上传后,在服务器端存储的临时文件名。

❑$_FILES['myfile']['error']表示和文件上传的相关错误信息。

文件提交后,一般会被存储到服务器的默认临时目录中,可以通过修改php.ini中的upload_tmp_dir项,修改为其他路径。使用函数move_uploaded_file()将上传的文件移到指定的目录下。该函数的原型如下所示。第1个参数filename指合法的上传文件,第2个参数destination是移动后的目标文件。如果上传的文件不合法,或由于某种原因无法移动文件,该函数会返回FALSE。


move_uploaded_file(filename,destination)


代码3-7是处理文件上传的一个示例PHP程序,代码3-6所示的HTML文档中的文件提交后,将由3-7.php来处理。

注意 一定要先在DOCUMENT_ROOT指定的目录下新建一个文件夹upload。

代码3-7 处理文件上传的PHP程序3-7.php


01 <?php

02 //将文件移至服务器的根目录的upload目录下,upload目录要事先建立好

03 $upload_path=$_SERVER['DOCUMENT_ROOT']."/upload/";

04 $dest_file=$upload_path.basename($_FILES['myfile']['name']);

05

06 //将临时文件移至目标文件

07 if(move_uploaded_file($_FILES['myfile']['tmp_name'],$dest_file))

08 {

09 echo"文件已上传至服务器根目录的upload目录下";

10 }

11 else

12 {

13 echo"文件上传时发生了一个错误".$_FILES['myfile']['error'];

14 }

15 ?>


【代码解析】代码3-7首先定义一个存放上传文件的目录,然后通过函数move_uploaded_file()将临时文件移至这个目录下。浏览3-6.html文档,选择一个要上传的文件,如图3-9所示。单击“提交上传”按钮后,如果上传成功,会显示上传成功的信息,如图3-10所示。

图 3-9 选择一个要上传的文件
图 3-10 文件上传成功

转到服务器根目录的upload目录下,将会看到刚刚上传的文件“read.txt”,如图3-11所示。

图 3-11 上传的文件在服务器中的位置

教程类别