出现的问题
关于运算符??
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');
  $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');
  $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']); } ?>
 
  |