OneExplorer 是一个单文件的 php 文件浏览器,主要用于展示服务器目录/文件列表以方便访问和下载等。
本文展示 OneExplorer 的更新日志,关于 OneExplorer 请点击这里。
OneExplorer 是一个单文件的 php 文件浏览器,主要用于展示服务器目录/文件列表以方便访问和下载等。
本文展示 OneExplorer 的更新日志,关于 OneExplorer 请点击这里。
近来实在太忙了,今天好不容易有点时间,终于决定把我的 OneExplorer 这款小程序改进下了。
OneExplorer 是自己以前没事写的一个代替服务器自带的目录浏览程序,用来开发的时候访问文件。
这个东西最大的特点是整个程序就只有一个 PHP 文件,上面的图片也全部来自这个 PHP 文件,我个人觉得还是挺有意思的。
这次的改变是增加了像 Win7 一样的地址栏,可以直接在地址栏上查看每一层下的目录列表。并且美化了ROOT、上一层和刷新的按钮,使用了 CSS3 的效果,程序代码方面也做了些简化,去掉了一些不必要的函数封装等,去掉了地址栏传递时目录前面的“./”,还修改一些文字表达,以及样式的调整等。并且还很猥琐的加上了版权信息,哇哈哈。
上截图:
[attach=250]
这次修改花了将近二十个小时的时间,其中有一个下午在解决一个 JS 的元素判断以及变量的迭代问题了,真郁闷。已测试通过 IE6+ 和目前的主流浏览器。
[attach=251]
还有最近我的 VgotFaster 框架在应用到公司的项目中时,很多东西也逐渐的成熟了,比如对数据库的多元操作,多语言支持,以及一些辅助函数和类库的完善,可惜的是一直没有时间来完成项目主页,还有我的 ideawind 啊,什么时候才有时间做完这些东西啊。
透露一下 VgotFaster 主页的 PSD 图部分,以及 ideawind 界面。
[attach=252]
[attach=253]
什么都没有
在功能上没有什么大的改进,毕竟只是用来在本地 localhost 测试方便打开链接的而已。
[attach=131]
/*
One Explorer V1.1.1 beta PHP
Copyright (c) 2008 www.vgot.cn
## History ##
1.0.0 ~ 2008-11-23
诞生
1.0.1 ~ 2008-12-?
[访问目录]功能,版本使用 "VERSION" 常量定义
1.0.2 ~ 2008-12-28
取消 getDirList() 函数,取消整体一半循环
1.1.0 ~ 2008-12-29~30
增加多动作模式
重新将获取目录改为函数读取,但不增加循环次数
读目录函数对文件读取多属性,文件大小和创建时间
增加 图片 Base64 Code ,内置多种图标
更改整体排序
代码位置和逻辑优化,由中间 1.0.5 到 1.1.0
去除无缓存语句
1.1.1 ~ 2008-12-30
修改一些页面上的显示错误
添加字符串截取函数
*/
这次最有趣的地方就是你可以看到的页面里的图标,其实这个程序只有一个PHP文件,这些文件夹和文件名前面的小图片图标全都是用 base64 编码嵌入在 PHP 源码里面了,我觉得这个将会在以后很多程序里得到大的应用
这是其中一个图标,img.gif 文件
怎么把图片变成 base64 编码放到PHP里呢,你可以看看这篇文章:http://www.vgot.net/echo/?action=show&id=171
最近准备写一个CMS系统,也刚好在学一些PHP框架,结果花一个晚上把那个 MooPHP 框架给看透了,简单的很,但是做的真的很好,现在刚起步,应该有很大发展潜力的吧,于是想用这个框架来做一个CMS,因为在 Apache 服务器打开默认根目录如果里面没有默认文件的话会显示一个文件列表,这个很实用,调试网站和众多文件的时候就不需要输入地址了,但是如果有缺省文件就打开的是主页了,于是又准务用 MooPHP 做一个小的在线文件浏览器,做倒是做出来了,用了 MooTemplate 也就是模板,这是我第一次使用模板引擎,感觉蛮好的,但因为这个小在线文件浏览器功能甚小,学得搞一个 PHP 框架太浪费了,完全可以用一个文件来写,就删呀删,减啊减,做了一个小的在线文件浏览器,类似于 Apache 的文件列表功能,但是没有文件的详细信息,我给它取个名叫 One Explorer,代码公布出来大家一起研究研究,其实也没什么技术可言,无非就是读读目录而已,但是本调试网站的时候,一会儿访问这个文件,一会儿访问那个文件用这个可方便多了,只有一个文件,把下面的代码保存为 PHP 文件就行了,放在根目录。这个只适合本地调试的时候用哦,不要放在自己网站里,不然被人家知道地址把你网站里的东西看了个遍可就不好了哦...
PHP代码
<?php /* One Explorer V1.0 beta PHP Copyright (c) 2008 VGOT.CN */ function getRelativePath($path) { $realpath = realpath($path); $realpath = str_replace("\\","/",$realpath); return $realpath; } function getUpDir($path){ $path = rtrim($path,'/'); $path = explode('/',$path); $pathLast = sizeof($path) - 1; unset($path[$pathLast]); $path = join('/',$path); return $path; } function getDirList($folder, $isSubDir = false) { $dirList = array(); if(is_dir($folder)) { $handle = opendir($folder); while(false !== ($myFile = readdir($handle))) { if($myFile != '.' && $myFile != '..') { $dirList[] = $myFile; if($isSubDir && is_dir($folder.'/'.$myFile)) { getDirList($folder.'/'.$myFile, $isSubDir); } } } closedir($handle); unset($folder, $isSubDir); return $dirList; } return $dirList; } function footer(){ ?> <hr /> <address>One Explorer V1.0 beta & </address><? echo $_SERVER['SERVER_SIGNATURE']; ?> <?php } $dir = $_GET['dir']; $dir = (empty($dir)) ? './' : $dir.'/'; $rpath = getRelativePath($dir); $upDir = getUpDir($dir); if(!file_exists($rpath)) { echo '<h1>目录不存在</h1>'; footer(); die(); } $allList = getDirList($rpath); $dirlist = array(); $dirlist['dir'] = array(); $dirlist['file'] = array(); foreach($allList as $name){ if(is_dir($rpath.'/'.$name)){ $dirlist['dir'][] = $name; }else{ $dirlist['file'][] = $name; } } $title = ltrim($dir,'.'); $title = (empty($title) or $title == '/') ? 'ROOT' : $title; $dirQuantity = count($dirlist['dir']); $fileQuantity = count($dirlist['file']); header("programa:no-cache"); //没有缓存 ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Cache-Control" content="no-cache"> <meta http-equiv="Expires" content="-1"> <title><?php echo $title; ?></title> <style type="text/css"> <!-- body{ font-size:11pt; margin:0px; background-color:#F7F7F7; } a:link{color:#0000FF; text-decoration:underline;} a:visited{color:#810081;} .padContent{padding:10px;} .path{background-color:#F2FFA5; padding:5px; border-bottom:1px solid #FFAFB2;} li a{line-height:17px; voice-family:inherit; display:block;} .folder li a:hover{background-color:#F2FFA5; font-style:italic; font-weight:bold; color:black;} .file li a:hover{background-color:#BFFAFF; font-style:italic; font-weight:bold; color:black;} address{text-align:right;} --> </style> </head> <body> <div class="path"><!-- 绝对:<?php echo $rpath;?> --> 相对 <?php echo $dir;?> </div> <div class="padContent"> <p class="tools"> <?php if($dir != './'){ ?><a href="?">ROOT</a> <a href="?dir=<?php echo $upDir; ?>">UP向上</a> <?php } ?><a href="javascript:location.reload();">刷新</a> 当前目录下<?php echo ($dirQuantity >=1) ? '有'.$dirQuantity.'个文件夹' : '没有文件夹'; echo ','; echo ($fileQuantity >=1) ? $fileQuantity.'个文件' : '没有文件'; ?> </p> <div class="list"> <?php if($dirQuantity >= 1){ ?> 文件夹列表: <ul class="folder"> <?php foreach($dirlist['dir'] as $dirName) {?> <li><a href="?dir=<?php echo $dir.$dirName; ?>" title="点击浏览此目录下的内容"><span><?php echo $dirName;?></span></a></li> <?php } ?> </ul> <?php } ?> <?php if($fileQuantity >= 1){ ?> 文件列表: <ul class="file"> <?php foreach($dirlist['file'] as $fileName) {?> <li><a href="<?php echo $dir.$fileName; ?>" target="_blank" title="点击访问此文件"><span><?php echo $fileName;?></span></a></li> <?php } ?> </ul> </div> <?php } footer(); ?> </div> </body> </html>