文件上传
文件上传的相关配置
表单设置
要进行文件的上传,需要对form表单进行特殊设置;
1.设定表单数据的提交方式为POST
2.设定enctype属性值为: multipart/form-data
3.为了避免用户等待许久之后才发现上传文件太大,可以在表单中添加
MAX_FILE_SIZE隐藏域,通过设置其value值可以限制上传文件的大小;
PHP设置
1.file_uploads
是否允许通过HTTP上传文件,默认为ON
2.upload_max_filesize
允许上传文件大小的最大值,默认为2M,此指令必须小于post_max_size;
3.upload_tmp_dir
指定上传文件的临时存放路径,这个目录对于拥有此服务器进程的用户必须是可写的;
如果未指定则使用系统默认值;
4.post_max_size
控制POST方式提交数据php所能够接收的最大数据量;
5.memory_limit
指定单个脚本程序可以使用的最大内存容量;
6.max_execution_time
此指令确定php脚本可以执行的最长时间,以秒为单位,默认为30秒;
$_FILES 数组
$_FILES超级全局变量作用是存储各种与上传文件有关的信息;
$_FILES是一个二维数组,数组中共有5项:
$_FILES["userfile"]["name"] 上传文件的名称
$_FILES["userfile"]["type"] 上传文件的类型
$_FILES["userfile"]["size"] 上传文件的大小, 以字节为单位
$_FILES["userfile"]["tmp_name"] 文件上传后在服务器端储存的临时文件名
$_FILES["userfile"]["error"] 文件上传相关的错误代码
注:userfile只是一个占位符,代表文件上传表单元素的名字; 因此这个值将根据你所给定的名称有所不同;
上传错误信息
$_FILES['userfile']['error'] 提供了在文件上传过程中出现的错误:
1.UPLOAD_ERR_OK (value = 0)
如果文件上传成功返回0;
2.UPLOAD_ERR_INI_SIZE (value = 1)
如果试图上传的文件大小超出了 upload_max_filesize指令指定的值,则返回1;
3.UPLOAD_ERR_FORM_SIZE (value = 2)
如果试图上传的文件大小超出了MAX_FILE_SIZE指令(可能嵌入在HTML表单中)指定的值,则返回2;
4.UPLOAD_ERR_PARTIAL (value = 3)
如果文件没有完全上传,则返回3; 如网络出现错误,导致上传过程中断;
5.UPLOAD_ERR_NO_FILE (value = 4)
如果用户没有指定上传的文件就提交表单,则返回4
文件上传函数
is_uploaded_file() move_uploaded_file()
is_uploaded_file
is_uploaded_file(file) 函数检查指定的文件是否是通过 HTTP POST 上传的。
if(is_uploaded_file($_FILES['userfile']['tmp_name'])){
copy($_FILES['userfile']['tmp_name'], "test.txt");
}else{
echo "文件上传失败!";
}
move_uploaded_file
参数 |
描述 |
file |
必需。规定要移动的文件。 |
newloc |
必需。规定文件的新位置。 |
move_uploaded_file()作用是将上传文件从临时目录移动到目标目录;
虽然copy()也可以实现同样功能,
但move_uploaded_file()还提供了一种额外的功能,
它将检查由filename输入参数指定的文件确实是通过http post 上传机制上传的。
如果所指定的文件并非上传文件,则移动失败,返回false;
move_uploaded_file($_FILES['userfile']['tmp_name'], "1/test.jpg");
图片上传
function.php
<?php
function upload($name, $type = array('jpg', 'jpeg', 'png', 'gif'), $size = 1048576, $upload = 'upload')
{
$error = $_FILES[$name]['error'];
switch ($error) {
case 1:
return '上传大小不能超过upload_max_filesize设置的值';
break;
case 2:
return '上传大小不能超过MAX_FILE_SIZE设置的值';
break;
case 3:
return '图片上传不完整';
break;
case 4:
return '没有选择图片';
break;
}
$pre = pathinfo($_FILES[$name]['name'], PATHINFO_EXTENSION);
if (!in_array($pre, $type)) {
return '上传的图片类型错误';
}
$s = $_FILES[$name]['size'];
if ($s > $size) {
return '图片过大,请压缩后上传';
}
$file = date('YmdHis', time()) . mt_rand(1000, 9999) . mt_rand(1000, 9999) . '.' . $pre;
if (is_uploaded_file($_FILES[$name]['tmp_name'])) {
move_uploaded_file($_FILES[$name]['tmp_name'], $upload . '/' . $file);
return '图片上传成功,' . $file;
} else {
return '图片上传错误';
}
}
?>