文件上传的相关配置
表单设置
- 设定表单数据的提交方式为POST
- 设定enctype属性值为:
multipart/form-data
- 为了避免用户等待许久之后才发现上传文件太大,可以在表单中添加
MAX_FILE_SIZE
隐藏域,用过设置其value值可以限制上传文件的大小
//form表单数据以"post"方式传输到"file.uploads.php"页面
<form action="file.uploads.php" method="post">
//上传文件标签
<input type="file" name="file">
//设置上传文件的最大值
<input type="hidden" name="MAX_FILE_SIZE" vale ="1024">
//提交标签
<input type="submit">
</form>
PHP设置
file_uploads
是否允许通过HTTP上传文件,默认为ONupload_max_filesize
允许上传文件大小的最大值,默认为2M,此指令必须小于post_max_size
;upload_tmp_dir
指定上传文件的临时存放路径,这个目录对于拥有此服务器进程的用户必须是可写的,如果未指定则使用系统默认值;post_max_size
控制POST方式提交数据PHP所能接收的最大数据量
二. _FILES数组
- $_FILES超全局变量作用是存储各种与上传文件有关的信息
- $_FILES是一个二维数组,数组中共有五项
$_FILES["userfile"]["name"]
上传文件的名称$_FILES["userfile"]["type"]
上传文件的类型$_FILES["userfile"]["size"]
上传文件的大小$_FILES["userfile"]["tmp_name"]
文件上传后在服务器端储存的临时文件名$_FILES["userfile"]["error"]
文件上传相关的错误代码
三.上传错误信息
$_FILES["userfile"]["error"]
提供了在文件上传过程中出现的错误:
- 1.
UPLOAD_ERR_OK (value = 0)
如果文件上传成功返回0; - 2.
UPLOAD_ERR_INI_SIZE (value = 1)
如果试图上传的文件大小超出了 uploadmaxfilesize指令指定的值,则返回1; - 3.
UPLOAD_ERR_FORM_SIZE (value = 2)
如果试图上传的文件大小超出了MAXFILESIZE指令(可能嵌入在HTML表单中)指定的值,则返回2; - 4.
UPLOAD_ERR_PARTIAL (value = 3)
如果文件没有完全上传,则返回3; 如网络出现错误,导致上传过程中断; - 5.
UPLOAD_ERR_NO_FILE (value = 4)
如果用户没有指定上传的文件就提交表单,则返回4;
四.文件上传函数
4-1.is_uploaded_file()
is_uploaded_file(filename)
函数确定参数filename指定的文件是否使用HTTP POST上传,例如:
//获取上传文件的信息
$file = $_FILES["file"];
//输出该信息
print_r($file);
//判断上传的文件是否使用http post上传
if(is_uploaded_file($file['tmp_name'])){
//是则负责上传文件
copy($file['tmp_name'],"test2.txt");
}else{
//否则输出上传失败
echo"文件上传失败"
}
4-2.move_uploaded_file()
move_uploaded_file(filename,url)
作用是将上传文件从临时目录移动到url目标目录;虽然copy()也可以实现同样的功能,但move_uploaded_file(filename,url)
还提供了一种额外的功能,它将检查由filename输入参数指定的文件确实是通过 http post 上传机制上传的,如果指定的文件并非上传文件,则移动失败,返回false
//获取上传文件信息
$file = $_FILES["file"];
//移动上传文件到目标目录,返回bool值
$bol = move_uploaded_file($file["tmp_name"],"upload/".$file["name"]);
if($bol){
//移动成功则输出"上传成功",并且使用javescript代码设置2秒跳转回原来上传的页面
echo "上传成功<script>setTimeout(function(){location.href='upload,html'},2000)";
}else{
//失败则输出"上传失败"
echo "上传失败"
}