上传文件原理
上传文件,就是将文件从浏览器端传到服务器端;
上传文件,必须使用<form>标记来向服务器端发数据;
上传文件,<form>标记的method属性值必须是POST;
上传文件,<form>标记的enctype属性值必须是multipart/form-data;
上传文件,必须使用<input type = ‘file’ name=’upload’>标记实现
超全局变量数组$_FILES
上传文件的相关配置(php.ini)
upload_tmp_dir配置:修改上传文件的临时目录;
upload_max_filesize配置:上传单个文件的大小限制,默认为2MB。
post_max_size配置:规定上传多个文件的总大小,默认为8MB。
max_file_uploads配置:规定最多上传的文件个数,默认为20个。
file_uploads配置:上传功能是否开启,默认为on。
获取文件路径信息 pathinfo()
描述:返回文件路径的信息 ;
语法:mixed pathinfo ( string $path [, int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME ] )
参数:
$path,要解析的路径。
$options,如果省略,返回全部单元,取值有:PATHINFO_DIRNAME(目录名称)、PATHINFO_BASENAME(文件名称)、PATHINFO_EXTENSION(扩展名)、PATH_FILENAME(文件名)。
检查数组中是否存在某个值 in_array()
描述:检查数组中是否存在某个值
语法:bool in_array ( mixed $needle , array $arr )
参数:$needle检索的值,$arr原数组。
生成唯一ID uniqid()
描述:生成一个唯一ID
语法:string uniqid ([ string $prefix = "" [, bool $more_entropy = false ]] )
参数:
$prefix前缀字符串,如果省略,返回字符串长度为13;
$more_entropy后缀字符集,如果省略,返回字符串长度为23。
前端文件file.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form name="from1" method="post" action='./upload.php' enctype="multipart/form-data">
上传图片:<input type="file" name="uploadFile"><br><br>
<input type="submit" name="" value='上传'>
<input type="hidden" name="sc" value="upload">
</form>
</body>
</html>
后台接收文件upload.php
<?php
header("content-type:text/html;charset=utf-8");
//单个图片文件上传
//判断表单是否提交
if(isset($_POST['sc']) && $_POST['sc']=='upload')
{
//打印上传文件信息
echo "<pre>";
print_r($_FILES);
echo "<pre>";
//(1)判断上传文件有没有错误发生
if($_FILES['uploadFile']['error']!=0)
{
echo "上传文件有错误发生";
die();
}
//(2)上传文件大小不能超过2MB
if($_FILES['uploadFile']['size']>1024*1024*2)
{
echo "上传文件超过了2MB的最大限额!";
die();
}
//(3)判断上传文件是否为图片
$arr=array('jpg','gif','png');
$ext=pathinfo($_FILES['uploadFile']['name'],PATHINFO_EXTENSION);
if(!in_array($ext,$arr))
{
echo '上传文件类型不是图片';
die();
}
//(4)移动文件
$tmp_name=$_FILES['uploadFile']['tmp_name']; //临时文件
$dst_name="./img/".uniqid().".".$ext;
move_uploaded_file($tmp_name,$dst_name);
echo "文件{$_FILES['uploadFile']['name']}上传成功!";
header("Refresh:3;url=./file.html");
die();
}
else
{
echo "非法操作!";
}
?>