一、上传
1、单文件上传
1.1 html页面
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<form action='./xxoo.php' method="post" enctype='multipart/form-data'>
<input type="file" name="upload" />
<input type="submit" value="上传" />
</form>
</body>
</html>
1.2 php
<?php
//我要做一系列的判断。
//错误号
$error = $_FILES['upload']['error'];
//如果错误号不为0那么没必要再向下执行。
switch($error){
case 1:
case 2:
case 3:
case 6:
case 7:
exit('上传内部出错!');
break;
case 4:
exit('亲,没文件!');
break;
}
//文件的后缀名
$name = $_FILES['upload']['name'];
$nameInfo =explode('.',$name);
$sufFix = array_pop($nameInfo);
//允许上传的后缀名
$allowType = array('jpeg','jpg','png','gif');
if(!in_array($sufFix,$allowType)){
exit('亲,不允许的类型!');
}
//判断mime
$allowMime = array('image/jpeg','image/png','image/gif','image/jpg');
//现在的mime
$mime = $_FILES['upload']['type'];
if(!in_array($mime,$allowMime)){
exit('亲,类型不对!');
}
//判断大小
$allowSize = 100000;
$size = $_FILES['upload']['size'];
if($size > $allowSize){
exit('亲,太大了!');
}
//判断临时文件是否由http的post方法提交的。
if(is_uploaded_file($_FILES['upload']['tmp_name'] )){
//新名字
$newFileName = time().md5($name).rand(111,999).'.'.$sufFix;
move_uploaded_file($_FILES['upload']['tmp_name'],$newFileName);
}else{
exit('错误!');
}
?>
2、多文件上传
2.1 html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<form action='./3.php' method="post" enctype='multipart/form-data'>
<input type="file" name="upload[]" />
<input type="file" name="upload[]" />
<input type="file" name="upload[]" />
<input type="submit" value="上传" />
</form>
</body>
</html>
2.2 php
<?php
//拿到所有的name,tmp_name,error,type,size
$name = $_FILES['upload']['name'];
$tmp_name = $_FILES['upload']['tmp_name'];
$error = $_FILES['upload']['error'];
$type = $_FILES['upload']['type'];
$size = $_FILES['upload']['size'];
//声明一个错误信息数组
$errorMessage = array();
//声明允许的mime数组
$allowMime = array('image/jpeg','image/png','image/gif','image/jpg');
//允许上传的后缀名
$allowType = array('jpeg','jpg','png','gif');
//允许文件最大字节
$allowSize = 1000000;
foreach($tmp_name as $key => $value){
//echo $name[$key].'-'.$tmp_name[$key].'-'.$error[$key].'-'.$type[$key].'-'.$size[$key].'<hr />';
//判断错误号
$eError = $error[$key];//单个的错误号
switch($eError){
case 1:
case 2:
case 3:
case 6:
case 7:
$errorMessage[$key] = '系统内部错误';
continue 2;
break;
case 4:
$errorMessage[$key] = '没有文件被上传';
continue 2;
break;
}
//判断mime类型
$eMime = $type[$key];
if(!in_array($eMime,$allowMime)){
$errorMessage[$key] = '类型不符';
continue;
}
//文件的后缀名
$one_name = $name[$key];
$nameInfo =explode('.',$one_name);
$sufFix[$key] = array_pop($nameInfo);
if(!in_array($sufFix[$key],$allowType)){
$errorMessage[$key] = '不允许的类型';
}
//判断大小
if($size[$key] > $allowSize){
$errorMessage[$key] = '太大了';
}
}
if(count($errorMessage) > 0){ //有错误
foreach($errorMessage as $k=>$v){
exit('第'. ($k+1) .'个文件'.$v);
}
}
foreach($tmp_name as $save_key=>$save_val){
if(is_uploaded_file($save_val)){
//新名字
$newFileName = uniqid().'.'.$sufFix[$save_key];
move_uploaded_file($save_val,$newFileName);
}else{
exit('你个龟孙!');
}
}
?>
3、文件下载
3.1 html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<a href='./xxoo.php?fileName=Aatrox_1.jpg' target='_blank'>贱魔1</a>
<a href='./xxoo.php?fileName=Aatrox_2.jpg'>贱魔2</a>
<a href='./xxoo.php?fileName=Aatrox_3.jpg'>贱魔3</a>
<a href='./xxoo.php?fileName=Ahri_0.jpg'>阿狸1</a>
<a href='./xxoo.php?fileName=Ahri_1.jpg'>阿狸2</a>
</body>
</html>
3.2 php
<?php
//接收文件名
$fileName = $_GET['fileName'];
//设置字符集
header('content-type:text/html;charset=utf-8');
//告诉浏览器这是一个附件
header('content-disposition:attachment;filename='.$fileName);
readfile('./download/'.$fileName);
?>