单一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 相关文章推荐
怎样在UNIX系统下安装MySQL
Oct 09 PHP
模仿OSO的论坛(四)
Oct 09 PHP
PHP安全配置
Dec 06 PHP
PHP学习笔记之数组篇
Jun 28 PHP
php.ini 配置文件的深入解析
Jun 17 PHP
深入解析PHP内存管理之谁动了我的内存
Jun 20 PHP
解析PHP正则提取或替换img标记属性
Jun 26 PHP
PHP扩展程序实现守护进程
Apr 16 PHP
微信公众号OAuth2.0网页授权问题浅析
Jan 21 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
Feb 28 PHP
PHP手机短信验证码实现流程详解
May 17 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 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 循环删除无限分类子节点的实现代码
2013/06/21 PHP
php简单实现多语言切换的方法
2016/05/09 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
2016/10/08 PHP
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
2007/03/06 Javascript
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
JavaScript中判断函数、变量是否存在
2015/06/10 Javascript
微信小程序 数据交互与渲染实例详解
2017/01/21 Javascript
分享19个JavaScript 有用的简写写法
2017/07/07 Javascript
ReactJs实现树形结构的数据显示的组件的示例
2017/08/18 Javascript
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
[42:27]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第三局
2016/03/05 DOTA
零基础写python爬虫之抓取糗事百科代码分享
2014/11/06 Python
python自定义异常实例详解
2017/07/11 Python
python列表生成式与列表生成器的使用
2018/02/23 Python
python pycurl验证basic和digest认证的方法
2018/05/02 Python
python自动化报告的输出用例详解
2018/05/30 Python
Django框架使用内置方法实现登录功能详解
2019/06/12 Python
python基于pdfminer库提取pdf文字代码实例
2019/08/15 Python
简单了解django文件下载方式
2020/02/10 Python
英国在线汽车和面包车零件商店:Car Parts 4 Less
2018/08/15 全球购物
澳大利亚儿童精品仓库:Goo & Co.
2019/06/20 全球购物
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
学校副校长四风对照检查材料整改措施
2014/09/25 职场文书
2014最新预备党员思想汇报范文:中国梦,我的梦
2014/10/25 职场文书
2014酒店客房部工作总结
2014/12/16 职场文书
年度考核表个人总结
2015/03/06 职场文书
幼儿园中秋节活动总结
2015/03/23 职场文书
刑事附带民事上诉状
2015/05/23 职场文书
pytorch 6 batch_train 批训练操作
2021/05/28 Python
详解Python+OpenCV进行基础的图像操作
2022/02/15 Python
Java 通过手写分布式雪花SnowFlake生成ID方法详解
2022/04/07 Java/Android
win10滚动条自动往上跑怎么办?win10滚动条自动往上跑的解决方法
2022/08/05 数码科技