出现的问题

关于运算符??

php中两个问号是php7新推出的一个NULL合并运算符??
如果它存在且不为NULL,则返回其第一个操作数;
否则,返回其第二个操作数。
从左到右评估。NULL合并运算符也可以链形式使用。

例如:

$a = null; var_dump($a??1); 输出1
如果$a = 0; var_dump($a??1); 输出0
如果是空字符串,输出也是空字符串。

黑名单、白名单、类型 过滤

1
2
3
4
5
$name=$_FILES['f']['name'];
$type=$_FILES['f']['type'];
$size=$_FILES['f']['size'];
$tmp_name=$_FILES['f']['tmp_name'];
$error=$_FILES['f']['error'];

黑名单机制:

1
2
3
4
5
6
7
8
9
10
$black_ext=array('php','asp','jsp','aspx');
//xxx.jpg xxx.png
$fenge = explode('.',$name);
$exts = end($fenge);
if(in_array($exts,$black_ext)){
echo '非法后缀文件'.$exts;
}else{
move_uploaded_file($tmp_name,'upload/'.$name);
echo '<script>alert("上传成功")</script>';
}

白名单机制:

1
2
3
4
5
6
7
8
9
10
$allow_ext=array('png','jpg','gif','jpeg');
//xxx.jpg xxx.png
$fenge = explode('.',$name);
$exts = end($fenge);
if(!in_array($exts,$allow_ext)){
echo '非法后缀文件'.$exts;
}else{
move_uploaded_file($tmp_name,'upload/'.$name);
echo '<script>alert("上传成功")</script>';
}

MIME文件类型过滤:

1
2
3
4
5
6
7
$allow_type=array('image/png','image/jpg','image/jpeg','image/gif');
if(!in_array($type,$allow_type)){
echo '非法后缀文件';
}else{
move_uploaded_file($tmp_name,'upload/'.$name);
echo '<script>alert("上传成功")</script>';
}

文件管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>文件列表</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<style type="text/css">
ul {
list-style: none;
padding: 0;
margin: 0;
}
li {
margin-bottom: 10px;
}
i {
margin-right: 10px;
}
a {
text-decoration: none;
color: #333;
}
</style>
</head>
<body>
<h1>当前目录下的文件列表</h1>
<ul>

</ul>
</body>
</html>

<?php
$dir = $_GET['path'] ?? './';

//1.打开目录,读取文件列表 opendir
//2.循环读取文件列表 while readdir
//3.判断是文件还是文件夹 is_dir

//打开目录,读取文件列表 opendir
function filelist($dir){
if($dh = opendir($dir)){
//循环读取文件列表 while readdir
while(($file=readdir($dh) )!== false){
//判断是文件还是文件夹 is_dir
if(is_dir($file)){
echo "<li><i class='fa fa-folder'></i> <a href='?path=$file'>" . $file . '</a></li>';
}else{
echo '<li><i class="fa fa-file"></i> <a href="#">' . $file . '</a></li>';
}
}
}
}

filelist($dir);

function del($file){
if(!is_dir($file)){
unlink($file);
echo "<script>alert('删除成功')</script>";
}
}

if(isset($_GET['del'])){
del($_GET['del']);
}


function down($filepath){
$fileName = basename($filepath);
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"" . $fileName . "\"");
header("Content-Length: " . filesize($filepath));
readfile($filepath);
}

if(isset($_GET['down'])){
down($_GET['down']);
}
?>