关联课件: 6子项目六 - $_FILE数组(点击在线预览)
6.3.3 $_FILE数组
文件上传的功能是经常使用的,这就需要用到$_FILE数组。有了文件上传的功能,不仅可以为网站动态添加附件,以实现网页的文字编辑的功能,而且还可以实现网站中相关图片、Flash动画等的动态更新等。下面就通过一个实例来了解$_FILE数组的使用方法和文件上传的基本原理。
1: <!--文件6-3.php:文件上传实例-->
2: <!--为了能正确运行,请在本文件的同目录下新建一文件夹,名为"upfile",权限设置可写-->
3: <?php
4: if ($_POST[add]=="上传"){
5: //根据现在的时间产生一个随机数
6: $rand1=rand (0,9);
7: $rand2=rand (0,9);
8: $rand3=rand (0,9);
9: $filename=date ("Ymdhms").$rand1.$rand2.$rand3;
10: if(empty ($_FILES['file_name']['name'])){
11: //$_FILES['file_name']['name']为获取客户端机器文件的原名称
12: echo"文件名不能为空";
13: exit;
14: }
15: $oldfilename=$_FILES['file_name']['name'];
16: echo "<br>原文件名为:".$oldfilename;
17:$filetype=substr($oldfilename,strrpos($oldfilename,"."),strlen($oldfilename)-strrpos($oldfilename,"."));
18: echo "<br>原文件的类型为:".$filetype;
19:if(($filetype!='.doc')&&($filetype!='.xls')&&($filetype!='.DOC')&&($filetype!='.XLS')){
20: echo "<script>alert('文件类型或地址错误');</script>";
21: echo "<script>location.href='6-6.php';</script>";
22: exit;
23: }
24: echo "<br>上传文件的大小为(字节):".$_FILES['file_name']['size'];
25: //$_FILES['file_name']['size']为获取客户端机器文件的大小,单位为B
26: if ($_FILES['file_name']['size']>1000000) {
27: echo "<script>alert('文件太大,不能上传');</script>";
28: echo "<script>location.href='6-6.php';</script>";
29: exit;
30: }
31: echo "<br>文件上传服务器后的临时文件名为:".$_FILES['file_name']['tmp_
name'];
32: //取得保存文件的临时文件名(含路径)
33: $filename=$filename.$filetype;
34: echo "<br>新文件名为:".$filename;
35: $savedir="upfile/".$filename;
36: if(move_uploaded_file($_FILES['file_name']['tmp_name'],$savedir)){
37: $file_name=basename($savedir); //取得保存文件的文件名(不含路径)
38: echo "<br>文件上传成功!保存为:".$savedir;
39: }else{
40: echo "<script language=javascript>";
41: echo "alert('错误,无法将附件写入服务器! 本次发布失败!');";
42: echo "location.href='6-6.php?';";
43: echo "</script>";
44: exit;
45: }
46: }
47: ?>
48: <html>
49: <head>
50: <meta http-equiv="Content-Language" content="zh-cn">
51: <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
52: <title>==文件上传实例==</title>
53: <style>
54: body{font-size:10pt};
55: td{font-size:10pt};
56: .style1 {color: #FF0000}
57: .style2 {
58: color: #000000;
59: font-weight: bold;
60: }
61: </style>
62: </head>
63: <body>
64: <div>
65: </div>
66: <form enctype="multipart/form-data" action="6-6.php" method="post">
67: <!--此处一定要有enctype="multipart/form-data"//-->
68: <table width="486" height="103" border="1" cellpadding= "0" cells pacing="0" bordercolor="#008080" id="AutoNumber1" style="border-collapse: collapse">
69: <tr bgcolor="#CCCCCC">
70: <td height="30" colspan="2"><div>文件上传实例</div> </td>
71: </tr>
72: <tr>
73: <td width="103" height="45"><div><span>*</span>文件上传地址:</div></td>
74: <td width="377" height="45"><input type="file" name="file_name">
75: (大小〈2M 为宜)</td>
76: </tr>
77: <tr>
78: <td height="33" colspan="2">
79: <p><input type="submit" value="上传" name="add">
80: <input type="reset" value="重置"name="B2"> </td>
81: </tr>
82: </table>
83: </form>
84: </body>
85: </html>
值得注意的是“<form enctype="multipart/form-data"......>”是一个标签,要实现文件的上传,必须将其指定为multipart/form-data,否则服务器将不知道如何执!
程序6-3.php的其运行效果如图6-6所示。
(a)单击“上传”按钮前
(b)单击“上传”按钮后
需要说明的是,“$_FILES['file_name']['name']”为上传文件的名字;“$_FILES['file_
name']['size']”为上传文件的大小,单位为字节;“$_FILES['file_name']['tmp_name']”为文件上传到服务器上临时文件的名字。
通过上面的例子,不难发现文件上传的基本原理是:客户机文件→服务器临时文件夹→服务器上传文件夹。文件上传过程中从客户机到服务器的上传过程中要通过一系列的验证,如文件的类型、大小等是否符合要求,从服务器临时文件夹到服务器上传文件夹的复制转移过程中要给文件重新命名等。
上面测试了上传一个文件的例子,要上传多个文件应当如何处理呢?PHP 支持同时上传多个文件并将它们的信息自动以数组的形式进行组织。要完成这项功能,需要在HTML表单中对文件上传域使用与选框和复选框相同的数组式提交语法,可以用下面的方法来处理。
提交的表单可以写成:
<form action="file-upload.php" method="post" enctype="multipart/form-data">
Send these files:<br>
<input name="userfile[]" type="file"><br>
<input name="userfile[]" type="file"><br>
<input type="submit" value="Send files">
</form>
当以上表单被提交后,数组$_FILES['userfile']、$_FILES['userfile']['name']和$_FILES['userfile']['size']将被初始化。如果register_globals的设置为on,则和文件上传相关的全局变量也将被初始化。所有这些提交的信息都将被储存到以数字为索引的数组中,用户接收使用即可。
$_FILES数组内容如下: $_FILES['myFile']['name'] 客户端文件的原名称。 $_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。 $_FILES['myFile']['size'] 已上传文件的大小,单位为字节。 $_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但用 putenv() 函数设置是不起作用的。 $_FILES['myFile']['error'] 和该文件上传相关的错误代码。
这个如何判断我提交的文件或者照片是不是正确的格式呢?
有了文件上传的功能,不仅可以为网站动态添加附件,以实现网页的文字编辑的功能,而且还可以实现网站中相关图片、Flash动画等的动态更新等
讲得不错,,,