单一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 相关文章推荐
PHP 中的一些经验积累
Oct 09 PHP
用PHP发电子邮件
Oct 09 PHP
PHP mkdir()无写权限的问题解决方法
Jun 19 PHP
浅析PHP中Session可能会引起并发问题
Jul 23 PHP
php语言中使用json的技巧及json的实现代码详解
Oct 27 PHP
PHP实现获取并生成数据库字典的方法
May 04 PHP
PHP实践教程之过滤、验证、转义与密码详解
Jul 24 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
Sep 30 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
Jan 27 PHP
PHP+Ajax实现的博客文章添加类别功能示例
Mar 29 PHP
KindEditor在php环境下上传图片功能集成的方法示例
Jul 20 PHP
PHP如何使用array_unshift()在数组开头插入元素
Sep 01 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开发规范手册之PHP代码规范详解
2011/01/13 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
2012/07/16 PHP
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
2013/03/06 PHP
PHP删除HTMl标签的三种解决方法
2013/06/30 PHP
thinkphp四种url访问方式详解
2014/11/28 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
jQuery代码优化 事件委托篇
2011/11/01 Javascript
jquery入门—数据删除与隔行变色以及图片预览
2013/01/07 Javascript
图片Slider 带左右按钮的js示例
2013/08/30 Javascript
javascript面向对象特性代码实例
2014/06/12 Javascript
Google官方支持的NodeJS访问API,提供后台登录授权
2014/07/29 NodeJs
node.js开机自启动脚本文件
2014/12/24 Javascript
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
Jquery实现鼠标移动放大图片功能实例
2015/03/25 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
2016/12/12 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
2017/01/12 Javascript
详解Node全局变量global模块
2017/09/28 Javascript
vue axios 给生产环境和发布环境配置不同的接口地址(推荐)
2018/05/08 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
微信小程序swiper实现滑动放大缩小效果
2018/11/15 Javascript
Node.js创建一个Express服务的方法详解
2020/01/06 Javascript
在vue中使用eslint,配合vscode的操作
2020/11/09 Javascript
一行JavaScript代码如何实现瀑布流布局
2020/12/11 Javascript
vue使用element-ui实现表单验证
2020/12/13 Vue.js
详解Python发送邮件实例
2016/01/10 Python
Python读取txt内容写入xls格式excel中的方法
2018/10/11 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
Python装饰器的应用场景代码总结
2020/04/10 Python
pycharm Tab键设置成4个空格的操作
2021/02/26 Python
CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式
2014/10/11 HTML / CSS
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
自我鉴定范文300字
2013/10/01 职场文书
平面设计自荐信
2013/10/07 职场文书
最新创业融资计划书
2014/01/19 职场文书
社区先进事迹材料
2014/05/19 职场文书
Java 多线程协作作业之信号同步
2022/05/11 Java/Android