单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)


Posted in PHP onJuly 31, 2012

以下是核心文件:
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]} </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]

核心文件夹:listFile/images/
效果图如下:
//listFile

单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
软件包下载:下载

PHP 相关文章推荐
基于mysql的bbs设计(四)
Oct 09 PHP
将一维或多维的数组连接成一个字符串的php代码
Aug 08 PHP
PHP类的静态(static)方法和静态(static)变量使用介绍
Feb 19 PHP
php牛逼的面试题分享
Jan 18 PHP
php实现兼容2038年后Unix时间戳转换函数
Mar 18 PHP
wamp服务器访问php非常缓慢的解决过程
Jul 01 PHP
Yii2.0高级框架数据库增删改查的一些操作
Nov 16 PHP
php实现XML和数组的相互转化功能示例
Feb 08 PHP
理清PHP在Linxu下执行时的文件权限方法
Jun 07 PHP
layui数据表格自定义每页条数limit设置
Oct 26 PHP
TP5框架实现一次选择多张图片并预览的方法示例
Apr 04 PHP
php命令行模式代码实例详解
Feb 26 PHP
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
Jul 31 #PHP
php切割页面div内容的实现代码分享
Jul 31 #PHP
php中数组首字符过滤功能代码
Jul 31 #PHP
PHP常用开发函数解析之数组篇[未完结]
Jul 30 #PHP
php中拷贝构造函数、赋值运算符重载
Jul 25 #PHP
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
Jul 23 #PHP
php 调试利器debug_print_backtrace()
Jul 23 #PHP
You might like
php 404错误页面实现代码
2009/06/22 PHP
php多功能图片处理类分享(php图片缩放类)
2014/03/14 PHP
laravel安装和配置教程
2014/10/29 PHP
浅析php工厂模式
2014/11/25 PHP
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
php关联数组快速排序的方法
2015/04/17 PHP
详解php中反射的应用
2016/03/15 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
2017/11/07 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
2007/11/30 Javascript
JavaScript 数组循环引起的思考
2010/01/01 Javascript
基于jQuery的表格操作插件
2010/04/22 Javascript
JavaScript操纵窗口的方法小结
2013/06/28 Javascript
js单词形式的运算符
2014/05/06 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
用户代理字符串userAgent可实现的四个识别
2015/09/20 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
Vue.JS入门教程之列表渲染
2016/12/01 Javascript
详解nodejs 文本操作模块-fs模块(四)
2016/12/22 NodeJs
简单谈谈gulp-changed插件
2017/02/21 Javascript
Vue实现table上下移动功能示例
2019/02/21 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
keep-alive不能缓存多层级路由菜单问题解决
2020/03/10 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
2020/04/30 Javascript
Python爬取网易云音乐上评论火爆的歌曲
2017/01/19 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
2018/06/13 Python
python 列表降维的实例讲解
2018/06/28 Python
django 配置阿里云OSS存储media文件的例子
2019/08/20 Python
Python中的wordcloud库安装问题及解决方法
2020/05/27 Python
CSS伪类与CSS伪元素的区别及由来具体说明
2012/12/07 HTML / CSS
2015年学校图书室工作总结
2015/05/19 职场文书
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers
Python 一键获取电脑浏览器的账号密码
2022/05/11 Python