PHP文件上传
本节介绍
- 上传文件的form表单
- 全局数组$_FILES
- move_uploader_file函数
1. FORM表单的设置
- FORM表单发送文件时,由于数据量较大,需要使用POST方式提交
- FORM元素的enctype属性需要设置为
multipart/form-doato,传输的数据要用到多媒体传输协议 - enctype属性指定了表单数据向服务器提交时所采用的编码类型,默认的缺省值是
application/x-www-form-urlencoded,此种方式在表单发送之前会将内容进行urlencode编码 - input的type属性设置为file:
<input type="file" name="file" /> - 示例:
-
<!DOCTYPE html> <html> <head> <title>Upload a file</title> <mata chartset="UTF-8" /> </head> <body> <form action="upload.php" method="post" enctype="multipart/form-data" target="blank"> Select file:<input type="file" name="file" /> <br /> <input type="submit" name="提交" /> </form> </body> </html>
-
2. 全局数组$_FILES
- PHP所通过全局数组
$_FILES接收客户端上传的文件信息 $_FILES至少为二维数组- 第一层数组的key为选择文件框input的
name值,第二层数组的key包括:- 被上传文件的名称:
$_FILES["file"]["name"] - 被上传文件的类型:
$_FILES["file"]["type"] - 被上传文件的大小,以字节计:
$_FILES["file"]["size"] - 存储在服务器的文件的临时副本的名称:
$_FILES["file"]["tmp_name"] - 由文件上传导致的错误代码:
$_FILES["file"]["error"]
- 被上传文件的名称:
- 示例:
-
查看$_FILES结构:
-
<?php //接收客户端发来的文件,然后保存 var_dump($_FILES) ; ?>
-
查看$_FILES结构:
-
<?php //接收客户端发来的文件,然后保存 //var_dump($_FILES) ; echo "name:".$_FILES["file"]["name"]."<br/>" ; echo "type:".$_FILES["file"]["type"]."<br/>" ; echo "size:".$_FILES["file"]["size"]."<br/>" ; ?>
-
3. move_uploader_file函数
move_uploader_file()函数将上传的文件移动到新位置。如果成功,返回true,否则返回false- 此函数仅用于通过HTTP POST上传的文件
- 如果目标文件已经存在,将会被覆盖
- 示例:
-
<?php //上传文件 if ($_FILES["file"]["error"]) { echo "上传出错<br/>" ; } else { $result = move_uploaded_file($_FILES["file"]["tmp_name"], "1.png") ; if ($result) { echo "保存成功!" ; } else { echo "保存失败!" ; } } ?>
-
4. 上传多个文件
- 上传多个文件和一个文件都使用
$_FILES来接收文件信息 - 上传多个文件时
$_FILES为三维数组 - 如
$_FILES["file"]["name"]是一个索引数组,存储所有上传文件的文件名 - FORM表单中input的
name属性值后必须添加[]:<input type="file" name="file[]" /> - 示例:
-
FORM表单:
-
<!DOCTYPE html> <html> <head> <title>Upload multiple files</title> <mata chartset="UTF-8" /> </head> <body> <form action="uploads.php" method="post" enctype="multipart/form-data" target="blank"> file1:<input type="file" name="file[]" /><br /> file2:<input type="file" name="file[]" /><br /> file3:<input type="file" name="file[]" /><br /> <input type="submit" name="提交" /> </form> </body> </html> -
查看$_FILES结构:
-
<?php //接收客户端发来的文件,然后保存 //第一层数组包含1个元素——key=file //第二层数组包含5个元素——key=name, tmp_name, type, size, error //第三层数组是索引数组,包含多个文件的信息 var_dump($_FILES) ; ?>
-
上传多个文件:
-
<?php //上传多个文件 for ($i=0; $i < count($_FILES["file"]["name"]); $i++) { //上传第i个文件 $j = $i + 1 ; if ($_FILES["file"]["error"][$i]) { echo "上传第 $j 个文件出错!<br />" ; } else { $result = move_uploaded_file($_FILES["file"]["tmp_name"][$i], $j."00.png") ; if ($result) { echo "上传第 $j 个文件成功!<br />" ; } else { echo "上传第 $j 个文件出错!<br />" ; } } } ?>
-