温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

单一index.php如何实现PHP任意层级文件夹遍历

发布时间:2021-02-01 10:06:41 来源:亿速云 阅读:131 作者:小新 栏目:开发技术

小编给大家分享一下单一index.php如何实现PHP任意层级文件夹遍历,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

index.php文件,代码如下:

<?php  header('Content-Type:text/html charset:utf-8');  date_default_timezone_set('PRC');  $rootDir = 'listFile'; //站点根目录,装载本程序所有文件  //站点base_url设置方法:  //考虑到通用性,现默认使用方法二,修改方法时注意同时修改.htaccess文件  //方法一:设置站点目录为根目录  //对应.htaccess:  //#RewriteBase /  // $base_url = 'http://www.listfile.com/';  //方法二:设置站点子目录为根目录  //对应.htaccess:  //RewriteBase /listFile/  $base_url = 'http://www.test.com/' .$rootDir .'/';  //解析文件夹路径  if(empty($_GET['return'])){  $dir = '.';  }else {  $dir = trim(array_pop(explode($rootDir,$_GET['return'])),'/');  if(empty($dir)) $dir = '.';  else $dir = './' . $dir;  }  // echo $dir; //当前文件夹  //遍历当前文件夹  $pattern = '*'; // '*'搜索全部文件,可以智能匹配,如*.jpg 搜索jpg文件,*.{jpg,png}搜索jpg和png文件,区分大小写!!  $skip = '*.skip'; //排除.skip类型文件(对应了“被跳过输出文件.skip”),你可以自己修改,如*.php排除所有php文件  $files = scandir_through($dir,$pattern,$skip,false);  ?>  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml">  <head>  <title>List Files</title>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <meta http-equiv="Content-Language" content="zh-CN" />  <script type="text/javascript" src="<?php echo $base_url . 'jquery-1.6.2.min.js' ?>"></script>  <script type="text/javascript" src="<?php echo $base_url . 'main.js' ?>"></script>  <link rel="stylesheet" rev="stylesheet" href="<?php echo $base_url . 'base.css' ?>" type="text/css" />  </head>  <body>  <script type="text/javascript">  var base_url = '<?php echo $base_url ?>';  //链接携带return标志,若携带,则autoClickUrl自添加一层下级文件夹用于跳转,跳转后获得美化后的URL。  var autoClickUrl = '<?php echo (strpos($_SERVER['REQUEST_URI'],'?return') !== false)?array_shift(explode('?',$_SERVER['REQUEST_URI']))."baddir/":'';?>';  </script>  <?php  //文件类型数组  $filetypes = array(  'txt' => 'txt文本文件',  'dir' => '文件夹',  'php' => 'php文件',  'css' => 'css文件',  'js' => 'js文件',  'doc' => 'Word文档',  'xls' => 'Excel工作表',  'jpg' => 'jpg图片文件',  'gif' => 'gif图片文件',  'png' => 'png图片文件',  'mp3' => 'mp3文件',  'zip' => 'zip压缩包',  'rar' => 'rar压缩包',  'htm' => 'htm网页文件',  'html' => 'html网页文件',  'undefined'=>'文件类型未知',  );  //自定义屏蔽输出文件  $skipfiles = array(  'index.php',  'index.html',  'jquery-1.6.2.min.js',  'main.js',  'base.css',  );  //按规律输出当前文件夹所有文件  echo "<div id='back'><a href=''><img src='{$base_url}images/dir.jpg'/>..</a></div>";  echo "<div id='container'>";  echo "<div class='file text-center'><div class='filename border-right'>名称</div><div class='filesize border-right'>大小</div>";  echo "<div class='filetype border-right'>类型</div><div class='filemtime'>修改日期</div></div>";  foreach($files['filename'] as $index => $file){  if(in_array($file,$skipfiles)) continue;  if(is_null($filetypes[$files['ext'][$index]])) $filetype = '文件类型未知';  else $filetype = $filetypes[$files['ext'][$index]];  echo "<div class='file'><div class='filename'><img src='{$base_url}images/{$files['ext'][$index]}.jpg'/><a href='{$base_url}{$files['widthDir'][$index]}'>{$file}</a></div>";  echo "<div class='filesize text-right'>{$files['filesize'][$index]}&nbsp;</div><div class='filetype text-right'>{$filetype}</div>";  echo "<div class='filemtime text-center'>{$files['filemtime'][$index]}</div></div>";  }  echo '</div>';  ?>  </body>  </html>  <?php  //文件夹遍历函数  function scandir_through($dir,$pattern='*',$skip=false,$subInclude=true,$flag=GLOB_BRACE){  $files = array();  //获取当前目录下所有文件及文件夹  $items = glob($dir . '/*');  //遍历所有项目,若设置$subInclude为true,则继续遍历子目录  for ($i = 0; $i < count($items); $i++) {  if ($subInclude && is_dir($items[$i])) {  $add = glob($items[$i] . '/*');  if($add === false) $add = array();  $items = array_merge($items, $add);  }else {  $slash = strrpos($items[$i],'/');  $dir = substr($items[$i],0,$slash);  //若当前文件匹配文件查找模式$pattern,则加入$files数组中  if(in_array($items[$i],glob($dir.'/'.$pattern,$flag)) && (($skip===false) || !in_array($items[$i],glob($dir.'/'.$skip,$flag)))) {  $files['filemtime'][] = date('Y-m-d H:i:s',filemtime($items[$i])); //放这里为了解决iconv后中文名文件获取时间失败问题  $items[$i] = iconv('gb2312','utf-8',$items[$i]);  $file = substr($items[$i],$slash+1);  $files['widthDir'][] = $items[$i];  $files['filename'][] = $file;  if(is_dir($items[$i])) {  $files['ext'][] = 'dir';  $files['filesize'][] = '';  }else {  $files['filesize'][] = ceil(filesize($file)/1024).'KB';  if(strrpos($file,'.') === false) $files['ext'][] = 'undefined';  else $files['ext'][] = strtolower(array_pop(explode('.',$file)));  }  }  }  }  return $files;  }  /*  //.htaccess 文件,位于根目录下,原理:访问路径非文件,即文件夹,因此跳转至根路径下做解析。  RewriteEngine on  #一级目录法  #RewriteBase /  #二级目录法  RewriteBase /listFile/  RewriteCond %{REQUEST_FILENAME} !-f  RewriteRule (.*) index.php?return=%{REQUEST_FILENAME} [L]  */  ?>

JS文件,代码如下:

$(document).ready(function(){  //根节点删除返回链接  if(window.location.href == base_url) $("#back").hide();  //返回处理  $("#back a").click(function(){  if(autoClickUrl != ''){  //Add baddir for click back.  var url = autoClickUrl;  }else{  var url=window.location.href;  }  if(url == base_url) return false; //如果在根节点触发返回链接,直接返回。  url = url.replace(location.search,''); //如果链接携带?return,截除return后续内容(由.htaccess生成)  url = url.substr(0,url.length-2); // 从url后第2位开始,避免/#情况存在时跳转错误  url = url.substr(0,url.lastIndexOf('/')+1); //截除最后一层文件夹,后退一级  window.location.href = url;  return false; //处理完毕,返回false阻止<a>标签点击后的跳转。  });  if(autoClickUrl != '') $("#back a").click()  });

CSS文件,代码如下:

 #container{  border: 1px solid;  margin: 0 auto;  padding: 10px;  width: 654px;  border-radius: 10px 10px 10px 10px;  }  #back{  width: 654px;  margin: 0 auto;  }  #back a{  line-style:none;  }  .file{  clear: both;  height: 2px;  margin-bottom: 20px;  }  .file img{  float:left;  }  .file a{  float:left;  margin-left: 5px;  }  .file div{  float:left;  width:150px;  }  .text-left{  text-align:left;  }  .text-center{  text-align:center;  }  .text-right{  text-align:right;  }  .border-left{  border-left:1px solid;  }  .border-right{  border-right:1px solid;  }  .file div.filename{  width:200px;  }  .file div.filesize{  width:100px;  }  .file div.filemtime{  width:200px;  }


.htaccess文件,代码如下:

#原理:访问路径非文件,即文件夹,因此跳转至根路径下做解析获取当前目录下的所有文件并列出。  RewriteEngine on  #一级目录法  #RewriteBase /  #二级目录法  RewriteBase /listFile/  RewriteCond %{REQUEST_FILENAME} !-f  RewriteRule (.*) index.php?return=%{REQUEST_FILENAME} [L]

以上是“单一index.php如何实现PHP任意层级文件夹遍历”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI