实现文件上传功能,需要用到一些专门用于上传文件的HTML语法
- 在<form>标记中,必须设置属性enctype=“multipart/form-data”,服务器可以知道上传的文件带有常规的表单信息
- 必须有一个可以设置上传文件最大长度的表单域
<input type=“hidden” name=“MAX_FILE_SIZE” value=“1000000”>
MAX_FILE_SIZE表单域是可选的,该值也可以在服务器端设置,如果在这个表单中使用,表单域的名称必须是MAX_FILE_SIZE。其值是允许上传文件的最大长度值(按字节计算)。- 需要指定文件类型,name可自定义,PHP接收脚本中要使用该name访问文件
编写处理文件的PHP,当文件被上传时,该文件将被保存在临时文件中,这是通过php.ini文件的upload_tmp_dir指令设置的,如果没有设置该指令,在默认情况下,该目录是Web服务器上的主临时目录。如果在脚本执行完成之前不移动、复制或更改文件名称,该文件将被删除。
在PHP脚本中,需要处理的数据保存在超级全局变量数组$_FILES中(在HTML表单中file名称为file)。
- $_FILES[“file”][“name”] - 被上传文件的名称
- $_FILES[“file”][“type”] - 被上传文件的类型
- $_FILES[“file”][“size”] - 被上传文件的字节大小
- $_FILES[“file”][“tmp_name”] - 存储在服务器的文件的临时副本的名称
- $_FILES[“file”][“error”] - 由文件上传导致的错误代码
$_FILES[“file”][“error”]中返回的错误代码。没哟个错误代码都有一个相应的错误常量。可能的常量和错误代码
- UPLOAD_ERROR_OK,值为0,表示没有发生任何错误,上传成功
- UPLOAD_ERR_INI_SIZE,值为1,表示上传文件的大小超出了约定值。文件大小的最大值在PHP配置文件中指定,该指令是upload_max_fliesize
- UPLOAD_ERR_FORM_SIZE,值为2,表示上传文件大小超出了HTML表单的MAX_FILE_SiZE元素所指定的最大值
- UPLOAD_ERR_PARTIAL,值为3,表示文件只被部分上传
- UPLOAD_ERR_NO_FILE,值为4,表示没有上传任何文件
- UPLOAD_NO_TMP_DIR,值为6,表示在php.ini文件中没有指定临时目录
- UPLOAD_ERR_CANT_WRITE,值为7,表示将文件写入磁盘失败
- UPLOAD_ERR_EXTENSION,值为8,表示上传文件被PHP扩展程序中断
实现简单的文件上传
HTML代码:
<html>
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
<label for="userfile">上传文件:</label>
<input type="file" name="myfile" id="myfile" /><br />
<input type="submit" value="提交" />
</form>
</body>
</html>
upload.php脚本代码:
<? php
if ($_FILES['myfile']['error'] == 0) {
echo
"文件上传成功!";
//用户系统中文件名称
$name = $_FILES['myfile']['name'];
//文件的MIME类型
$type = $_FILES['myfile']['type'];
//文件在Web服务器中临时存储位置
$tmp_name = $_FILES['myfile']['tmp_name'];
//任何与文件上传相关的错误代码
$error = $_FILES['myfile']['error'];
//文件的字节大小
$size = $_FILES['myfile']['size'];
//将文件保存在upload的文件夹下
move_uploaded_file($tmp_name, "upload/".$name);
} else if ($_FILES['myfile']['error'] == 1) {
//...
} else if ($_FILES['myfile']['error'] == 2) {
//...
} else if ($_FILES['myfile']['error'] == 3) {
//...
} else if ($_FILES['myfile']['error'] == 4) {
//...
} else if ($_FILES['myfile']['error'] == 6) {
//...
} else if ($_FILES['myfile']['error'] == 7) {
//...
} else if ($_FILES['myfile']['error'] == 8) {
//...
}
?>