热搜词
发表于 2021-10-9 14:26:32 | 显示全部楼层 |阅读模式
实现功能:单一index.php文件实现任意层次文件夹遍历功能。将文件夹中的文件自动生成网页(自动生成网站程序)

效果图:
下载.png

核心程序:
  1. <?php
  2.     header('Content-Type:text/html charset:utf-8');
  3.     date_default_timezone_set('PRC');
  4.     $rootDir = 'listFile';    //站点根目录,装载本程序所有文件
  5.    
  6.     //站点base_url设置方法:
  7.     //考虑到通用性,现默认使用方法二,修改方法时注意同时修改.htaccess文件
  8.    
  9.     //方法一:设置站点目录为根目录
  10.     //对应.htaccess:
  11.     //#RewriteBase   /
  12.     // $base_url = 'http://www.listfile.com/';
  13.    
  14.     //方法二:设置站点子目录为根目录
  15.     //对应.htaccess:     
  16.     //RewriteBase   /listFile/
  17.     $base_url = 'http://www.test.com/' .$rootDir .'/';
  18.    

  19.     //解析文件夹路径
  20.     if(empty($_GET['return'])){
  21.         $dir = '.';
  22.     }else {
  23.         $dir = trim(array_pop(explode($rootDir,$_GET['return'])),'/');
  24.         if(empty($dir)) $dir = '.';
  25.         else $dir = './' . $dir;
  26.     }
  27.     // echo $dir;    //当前文件夹
  28.    
  29.     //遍历当前文件夹
  30.     $pattern = '*';        // '*'搜索全部文件,可以智能匹配,如*.jpg 搜索jpg文件,*.{jpg,png}搜索jpg和png文件,区分大小写!!
  31.     $skip     = '*.skip';    //排除.skip类型文件(对应了“被跳过输出文件.skip”),你可以自己修改,如*.php排除所有php文件
  32.     $files = scandir_through($dir,$pattern,$skip,false);   
  33. ?>
  34. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  35. <html xmlns="http://www.w3.org/1999/xhtml">
  36. <head>
  37.     <title>List Files</title>
  38.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  39.     <meta http-equiv="Content-Language" content="zh-CN" />
  40.     <script type="text/javascript" src="<?php echo $base_url . 'jquery-1.6.2.min.js' ?>"></script>
  41.     <script type="text/javascript" src="<?php echo $base_url . 'main.js' ?>"></script>
  42.     <link rel="stylesheet" rev="stylesheet" href="<?php echo $base_url . 'base.css' ?>" type="text/css" />
  43. </head>
  44. <body>
  45. <script type="text/javascript">
  46. var base_url = '<?php echo $base_url ?>';
  47. //链接携带return标志,若携带,则autoClickUrl自添加一层下级文件夹用于跳转,跳转后获得美化后的URL。
  48. var autoClickUrl = '<?php echo (strpos($_SERVER['REQUEST_URI'],'?return') !== false)?array_shift(explode('?',$_SERVER['REQUEST_URI']))."baddir/":'';?>';
  49. </script>
  50. <?php
  51.     //文件类型数组
  52.     $filetypes = array(
  53.         'txt'    =>    'txt文本文件',
  54.         'dir'    =>    '文件夹',
  55.         'php'    =>    'php文件',
  56.         'css'    =>    'css文件',
  57.         'js'    =>    'js文件',
  58.         'doc'    =>    'Word文档',
  59.         'xls'    =>    'Excel工作表',
  60.         'jpg'    =>    'jpg图片文件',
  61.         'gif'    =>    'gif图片文件',
  62.         'png'    =>    'png图片文件',
  63.         'mp3'    =>    'mp3文件',
  64.         'zip'    =>    'zip压缩包',
  65.         'rar'    =>    'rar压缩包',
  66.         'htm'    =>    'htm网页文件',
  67.         'html'    =>    'html网页文件',
  68.         'undefined'=>'文件类型未知',
  69.     );
  70.     //自定义屏蔽输出文件
  71.     $skipfiles = array(
  72.         'index.php',
  73.         'index.html',
  74.         'jquery-1.6.2.min.js',
  75.         'main.js',
  76.         'base.css',
  77.     );

  78.     //按规律输出当前文件夹所有文件
  79.     echo "<div id='back'><a href=''><img src='{$base_url}images/dir.jpg'/>..</a></div>";
  80.     echo "<div id='container'>";
  81.     echo "<div class='file text-center'><div class='filename border-right'>名称</div><div class='filesize border-right'>大小</div>";
  82.     echo "<div class='filetype border-right'>类型</div><div class='filemtime'>修改日期</div></div>";
  83.     foreach($files['filename'] as $index => $file){
  84.         if(in_array($file,$skipfiles)) continue;
  85.         if(is_null($filetypes[$files['ext'][$index]])) $filetype = '文件类型未知';
  86.         else $filetype = $filetypes[$files['ext'][$index]];
  87.         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>";
  88.         echo "<div class='filesize text-right'>{$files['filesize'][$index]} </div><div class='filetype text-right'>{$filetype}</div>";
  89.         echo "<div class='filemtime text-center'>{$files['filemtime'][$index]}</div></div>";
  90.     }
  91.     echo '</div>';
  92. ?>
  93. </body>
  94. </html>

  95. <?php
  96.     //文件夹遍历函数
  97.     function scandir_through($dir,$pattern='*',$skip=false,$subInclude=true,$flag=GLOB_BRACE){
  98.         $files = array();
  99.         //获取当前目录下所有文件及文件夹
  100.         $items  = glob($dir . '/*');

  101.         //遍历所有项目,若设置$subInclude为true,则继续遍历子目录
  102.         for ($i = 0; $i < count($items); $i++) {
  103.             if ($subInclude && is_dir($items[$i])) {
  104.                 $add = glob($items[$i] . '/*');
  105.                 if($add === false) $add = array();
  106.                 $items = array_merge($items, $add);
  107.             }else {
  108.                 $slash = strrpos($items[$i],'/');
  109.                 $dir = substr($items[$i],0,$slash);
  110.                 //若当前文件匹配文件查找模式$pattern,则加入$files数组中
  111.                 if(in_array($items[$i],glob($dir.'/'.$pattern,$flag)) && (($skip===false) || !in_array($items[$i],glob($dir.'/'.$skip,$flag)))) {
  112.                     $files['filemtime'][] = date('Y-m-d H:i:s',filemtime($items[$i]));    //放这里为了解决iconv后中文名文件获取时间失败问题
  113.                     $items[$i] = iconv('gb2312','utf-8',$items[$i]);
  114.                     $file = substr($items[$i],$slash+1);
  115.                     $files['widthDir'][] = $items[$i];
  116.                     $files['filename'][] = $file;
  117.                     if(is_dir($items[$i])) {
  118.                         $files['ext'][] = 'dir';
  119.                         $files['filesize'][] = '';
  120.                     }else {
  121.                         $files['filesize'][] = ceil(filesize($file)/1024).'KB';
  122.                         if(strrpos($file,'.') === false) $files['ext'][] = 'undefined';
  123.                         else $files['ext'][] = strtolower(array_pop(explode('.',$file)));
  124.                     }
  125.                 }
  126.             }
  127.         }
  128.         return $files;
  129.     }
  130. /*
  131. //.htaccess 文件,位于根目录下,原理:访问路径非文件,即文件夹,因此跳转至根路径下做解析。
  132. RewriteEngine on
  133. #一级目录法
  134. #RewriteBase   /
  135. #二级目录法
  136. RewriteBase   /listFile/
  137. RewriteCond %{REQUEST_FILENAME} !-f
  138. RewriteRule (.*) index.php?return=%{REQUEST_FILENAME} [L]
  139. */

  140. ?>
复制代码

用户可以根据个人需要修改其中参数,包括:
1、站点设置
2、过滤文件设置


开发者:Zjmainstay
个人博客:http://www.cnblogs.com/Zjmainstay个人官网:http://www.zjmainstay.cn/

https://www.cnblogs.com/Zjmainst ... 5/php_listFile.html  单一index.php实现PHP任意层级文件夹遍历(原创自Zjmainstay)

相关文章:
http://www.zjmainstay.cn/php-scandir-through  PHP目录结构遍历函数
http://www.zjmainstay.cn/php-scan-through-non-recursion  PHP非递归遍历目录文件




全部评论0
回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|管理员之家 ( 苏ICP备2023053177号-2 )

GMT+8, 2024-12-28 10:52 , Processed in 0.180672 second(s), 25 queries .

Powered by Discuz! X3.5

Cpoyright © 2001-2024 Discuz! Team