建文 HTML 表单
要制作用作上传档案的表单与传统的表单差不多,但必须将表单中的 enctype 属性设成 multipart/form-data。enctype 属性是指定浏览器对表单中的参数进行编码的方法,默认值为 application/x-www-form-urlencoded。
以下是建立表单的例子:
upload.html
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<html> <head> <title>A simple upload form</title> </head> <body> <h2>A simple upload form</h2> <form method="post" action="upload.php" enctype="multipart/form-data"> Enter file name: <input type="file" name="userfile"><br> <input type="submit" value="Upload"> </form> </body> </html> |
处理上传档案
建立了以上的 HTMl 表单后,下一步要做的就是后端的处理。在 PHP 中可以透过二维阵列 $HTTP_POST_FILES 或 $_FILES 来存取所上传的档案详细内容。就以以上表单为例,输入元素名为 userfile,各阵列元素为:
$_FILES[‘userfile’][‘name’] — 档案在客户端电脑上的档案名称
$_FILES[‘userfile’][‘type’] — 档案的 MIME 类型,例如 “image/gif”
$_FILES[‘userfile’][‘size’] — 上传档案的档案大小,单为为 bytes
$_FILES[‘userfile’][‘tmp_name’] — 上传档案储存在服务器端的暂存盘案名
$_FILES[‘userfile’][‘error’] — 上传档案的错误号码
上传档案的 PHP 程式
以上介绍了建立上传档案用的表单及存取阵列,以下便建立上传档案的程式。首先需要建立一个目录作储存盘案,并需要确定 web server 有写入的权限,一般设成 777 就可以,假设使用以上的上传表单,以及上传目录是 “/var/www/uploads/”,以下是程式码范例会显示上传档案资讯以及上传档案:
upload.php
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<html> <head> <title>A simple upload form</title> </head> <body> <h2>Uploaded File Details</h2> <?php // display file details echo "Filename: " . $_FILES['userfile']['name'] . "<br>"; echo "Temporary Name: " . $_FILES['userfile']['tmp_name'] . "<br>"; echo "Size: ". $_FILES['userfile']['size'] . "<br>"; echo "Type: ". $_FILES['userfile']['type'] . "<br>"; // copy file here if (@copy($_FILES['userfile']['tmp_name'], "/var/www/uploads/" . $_FILES['userfile']['name'])) { echo "<b>File successfully upload</b>"; } else { echo "<b>Error: failed to upload file</b>"; } ?> </body> </html> |
以上传子使用了 copy 函式上传档案,其实 PHP 对上传档案已提供了两个专用函式,它们是 move_uploaded_file() 及 is_uploaded_file(),有兴趣的朋友可参考 PHP 使用手册关于这两个函式的简介及用法。
程式的改进
以上的上传程式只做了最基本的上传动作,在实际应用中还是会有问题,例如不能容纳相同的档案名称、同一目录档案过多时存取效率减低等问题。但本文只作一个入门的介绍,希望日后可以写一篇更深入的文章作介绍。