建文 HTML 表单
要制作用作上传档案的表单与传统的表单差不多,但必须将表单中的 enctype 属性设成 multipart/form-data。enctype 属性是指定浏览器对表单中的参数进行编码的方法,默认值为 application/x-www-form-urlencoded。
以下是建立表单的例子:
upload.html
A simple upload formA simple upload form
Enter file name:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
AsimpleuploadformAsimpleuploadform
Enterfilename:
处理上传档案
建立了以上的 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
A simple upload formUploaded File Details
// display file details
echo "Filename: " . $_FILES['userfile']['name'] . "
";
echo "Temporary Name: " . $_FILES['userfile']['tmp_name'] . "
";
echo "Size: ". $_FILES['userfile']['size'] . "
";
echo "Type: ". $_FILES['userfile']['type'] . "
";
// copy file here
if (@copy($_FILES['userfile']['tmp_name'], "/var/www/uploads/" . $_FILES['userfile']['name'])) {
echo "File successfully upload";
} else {
echo "Error: failed to upload file";
}
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
AsimpleuploadformUploadedFileDetails
// display file details
echo"Filename: ".$_FILES['userfile']['name']."
";
echo"Temporary Name: ".$_FILES['userfile']['tmp_name']."
";
echo"Size: ".$_FILES['userfile']['size']."
";
echo"Type: ".$_FILES['userfile']['type']."
";
// copy file here
if(@copy($_FILES['userfile']['tmp_name'],"/var/www/uploads/".$_FILES['userfile']['name'])){
echo"File successfully upload";
}else{
echo"Error: failed to upload file";
}
?>
以上传子使用了 copy 函式上传档案,其实 PHP 对上传档案已提供了两个专用函式,它们是 move_uploaded_file() 及 is_uploaded_file(),有兴趣的朋友可参考 PHP 使用手册关于这两个函式的简介及用法。
程式的改进
以上的上传程式只做了最基本的上传动作,在实际应用中还是会有问题,例如不能容纳相同的档案名称、同一目录档案过多时存取效率减低等问题。但本文只作一个入门的介绍,希望日后可以写一篇更深入的文章作介绍。
你可能感兴趣的内容: