PHP实现上传文件功能(附带实例)
在网络上,用户可以上传自己的文件。实现这种功能的方法很多,用户把一个文件上传到服务器,需要在客户端和服务器端建立一个通道来传递文件的字节流,并在服务器进行上传操作。
本节介绍一种使用代码最少,并且容易理解的方法。
全局变量 $_FILES 是一个二维数组,用于接收上传文件的信息,它会保存表单中 type 值为 file 的提交信息,有 5 个主要列,具体含义如下:
在 $_FILES["file"]["tmp_name"] 中,/tmp 目录是默认的上传临时文件的存放地点,此时用户必须将文件从临时目录中删除或移到其他位置,如果没有,则上传的文件会自动被删除。
可见,无论上传是否成功,程序最后都会自动删除临时目录中的文件。所以在删除前,需要将上传的文件复制到其他位置,这样才算真正完成了上传文件的过程。
另外,$_FILES["file"]["error"] 中返回的错误代码的常量对应的数值的含义如下:
下面通过案例来学习上传图片文件的方法和技巧:
1) 首先创建一个获取上传文件的页面,文件名为 11.9.html,代码如下:
2) 接着创建一个实现文件上传功能的文件。为了设置和保存上传文件的路径,用户需要在创建文件的目录下新建一个名称为“upload”的文件夹。然后新建 11.9.php 文件,代码如下:
单击“浏览”按钮,即可选择需要上传的文件,最后单击“上传”按钮,即可跳转到 11.9.php 文件,如下图所示,实现了文件的上传操作:
本节介绍一种使用代码最少,并且容易理解的方法。
PHP全局变量$_FILES
通过使用 PHP 的全局变量 $_FILES,用户可以从客户计算机向远程服务器上传文件。全局变量 $_FILES 是一个二维数组,用于接收上传文件的信息,它会保存表单中 type 值为 file 的提交信息,有 5 个主要列,具体含义如下:
- $_FILES["file"]["name"]:存放上传文件的名称。
- $_FILES["file"]["type"]:存放上传文件的类型。
- $_FILES["file"]["size"]:存放上传文件的大小,以字节为单位。
- $_FILES["file"]["tmp_name"]:存放存储在服务器的文件的临时全路径。
- $_FILES["file"]["error"]:存放文件上传导致的错误代码。
在 $_FILES["file"]["tmp_name"] 中,/tmp 目录是默认的上传临时文件的存放地点,此时用户必须将文件从临时目录中删除或移到其他位置,如果没有,则上传的文件会自动被删除。
可见,无论上传是否成功,程序最后都会自动删除临时目录中的文件。所以在删除前,需要将上传的文件复制到其他位置,这样才算真正完成了上传文件的过程。
另外,$_FILES["file"]["error"] 中返回的错误代码的常量对应的数值的含义如下:
- UPLOAD_ERR_OK=0:表示没有发生任何错误;
- UPLOAD_ERR_INI_SIZE=1:表示上传文件的大小超过了约定值;
- UPLOAD_ERR_FORM_SIZE =2:表示上传文件的大小超过了 HTML 表单隐藏域属性的 MAX_FILE_SIZE 元素所规定的最大值;
- UPLOAD_ERR_PARTIAL =3:表示文件只被部分上传;
- UPLOAD_ERR_NO_FILE =4:表示没有上传任何文件。
PHP文件上传
在 PHP 中,使用 move_uploaded_file() 函数可以将上传的文件移动到新位置。语法格式如下:move_uploaded_file(file,newloc)其中,file 为需要移动的文件,newloc 参数为文件的新位置:
- 如果 file 指定的上传文件是合法的,则文件被移动到 newloc 指定的位置;
- 如果 file 指定的上传文件不合法,则不会出现任何操作,move_uploaded_file() 函数将返回false;
- 如果 file 指定的上传文件是合法的,但出于某些原因无法移动,不会出现任何操作,move_uploaded_file() 函数将返回 false,此外还会发出一条警告。
提示,move_uploaded_file() 函数只能用于通过 HTTP POST 上传文件。如果目标文件已经存在,将会被覆盖。
下面通过案例来学习上传图片文件的方法和技巧:
1) 首先创建一个获取上传文件的页面,文件名为 11.9.html,代码如下:
<html> <head> <title>上传图片文件</title> </head> <body> <form action="11.9.php" method="post" enctype="multipart/form-data"> <label for="file">文件名:</label> <input type="file" name="file" id="file"><br/> <input type="submit" name="submit" value="上传"> </form> </body> </html>其中,
<form action="11.9.php" method="post" enctype="multipart/form-data">
语句中的 method 属性表示提交信息的方式是 post,即采用数据块;action 属性表示处理信息的页面为 11.9.php;ENCTYPE="multipart/form-data"表示以二进制的方式传递提交的数据。2) 接着创建一个实现文件上传功能的文件。为了设置和保存上传文件的路径,用户需要在创建文件的目录下新建一个名称为“upload”的文件夹。然后新建 11.9.php 文件,代码如下:
<?php // 允许上传的图片后缀 $allowedExts = array("gif", "jpeg", "jpg", "png"); $temp = explode(".", $_FILES["file"]["name"]); echo $_FILES["file"]["size"]; $extension = end($temp); // 获取文件后缀名 if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/pjpeg") || ($_FILES["file"]["type"] == "image/x-png") || ($_FILES["file"]["type"] == "image/png") && ($_FILES["file"]["size"] < 2048000) // 小于 200 kb && in_array($extension, $allowedExts)) { if ($_FILES["file"]["error"] > 0) { echo "错误:" . $_FILES["file"]["error"] . "<br/>"; } else { echo "上传文件名:" . $_FILES["file"]["name"] . "<br/>"; echo "文件类型:" . $_FILES["file"]["type"] . "<br/>"; echo "文件大小:" . ($_FILES["file"]["size"] / 1024) . " kB<br/>"; echo "文件临时存储的位置:" . $_FILES["file"]["tmp_name"] . "<br/>"; // 判断当期目录下的 upload 目录是否存在该文件 // 如果没有 upload 目录,你需要创建它,upload 目录权限为 777 if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " 文件已经存在。"; } else { // 如果 upload 目录不存在该文件则将文件上传到 upload 目录下 move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "文件存储在:" . "upload/" . $_FILES["file"]["name"]; } } } else { echo "非法的文件格式"; } ?>访问 11.9.html 网页,结果如下图所示:

单击“浏览”按钮,即可选择需要上传的文件,最后单击“上传”按钮,即可跳转到 11.9.php 文件,如下图所示,实现了文件的上传操作:
