PHP-php 生成以某一目录为根节点的文件信息树状结构

发布于 2016-12-12 23:57:47 字数 87 浏览 1307 评论 2

给定某一目录文件夹,用php生成以该目录为根节点树状文件信息,文件信息包括文件名、文件大小及更新时间。
那位兄才给个能满足上面需求的自定义函数,谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浮生未歇 2017-04-02 17:35:07

根据ci使用的方法,增加了一些文件的信息。目前有size,atime,mtime,ctime;如果需要增加更多信息根据那个规则添加就行。

/**
* @param string 目录名称
* @param int 递归层级,0不限制
* @param bool 是否显示文件的详细信息
* @param bool 是否显示隐藏文件
* @return array
*/
function directory_map($source_dir, $directory_depth = 0, $show_file_info = FALSE,$hidden = FALSE) {

if ($fp = @opendir($source_dir)) {
$filedata = array();
$new_depth = $directory_depth - 1;
$source_dir = rtrim($source_dir, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;

while (FALSE !== ($file = readdir($fp))) {

// Remove '.', '..', and hidden files [optional]
if ( ! trim($file, '.') OR ($hidden == FALSE && $file[0] == '.')) {
continue;
}

if (($directory_depth < 1 OR $new_depth > 0) && @is_dir($source_dir.$file)) {
$filedata[$file] = directory_map($source_dir.$file.DIRECTORY_SEPARATOR, $new_depth,$show_file_info, $hidden);
}else{
if(FALSE !== $show_file_info) {
$t = @stat($source_dir.$file);
if(FALSE !== $t) {
$filedata[$file]['size'] = sprintf("%.2fKB",$t['size']/1024);
$filedata[$file]['atime'] = date('Y-m-d h:i:s',$t['atime']);
$filedata[$file]['mtime'] = date('Y-m-d h:i:s',$t['mtime']);
$filedata[$file]['ctime'] = date('Y-m-d h:i:s',$t['ctime']);
}else
$filedata[$file] = array();
}else {
$filedata[] = $file;
}
}
}
closedir($fp);
return $filedata;
}
return FALSE;
}

虐人心 2016-12-20 09:46:19

<?php

function recursion_tree($dir, $pre = '', $level=0) {
$result = '';

// 显示根节点
$result .= $pre . ($level > 0 ? "|-" : ""). basename($dir) ."n";

$tab = "t";

// 最初的输入不是目录
if($level == 0 && !is_dir($dir)) {
return $result;
}

if ($dh = opendir($dir)) {
// 目录线

while (($file = readdir($dh)) !== false) {

$file_dir = $dir . DIRECTORY_SEPARATOR . $file;
// 非目录时
if(!is_dir($file_dir)) {
$result .= $pre . $tab . "|-";
//文件处理

$result .= sprintf("%s %s %s", $file, get_file_size($file_dir), get_file_mtime($file_dir));
$result .= "n";
} else if($file == '.' || $file == '..') {
continue;
} else {
$result .= recursion_tree($file_dir, $pre . $tab, ++$level);
}

}

// 关闭目录
closedir($dh);
}

return $result;
}

function get_file_size($file, $setup = null) {
$FZ = ($file && @is_file($file)) ? filesize($file) : NULL;
$FS = array("B","kB","MB","GB","TB","PB","EB","ZB","YB");

if(!$setup && $setup !== 0) {
return number_format($FZ/pow(1024, $I=floor(log($FZ, 1024))), ($i >= 1) ? 2 : 0) . '(' . $FS[$I] . ')';
} elseif($setup == 'INT') {
return number_format($FZ);
} else {
return number_format($FZ/pow(1024, $setup), ($setup >= 1) ? 2 : 0 ). '(' . $FS[$setup] . ')';
}
}

function get_file_mtime($file) {
return date('Y/m/d h:i:s A', filemtime($file));
}

echo recursion_tree("D:\source\kcaptcha");

输出

 kcaptcha
|-fonts
|-.htaccess 58(B) 2011/06/06 08:53:54 PM
|-palatino_linotype_bold.png 15(kB) 2011/06/06 08:53:54 PM
|-perpetua_bold.png 13(kB) 2011/06/06 08:53:54 PM
|-times_bold.png 14(kB) 2011/06/06 08:53:54 PM
|-form_example.php 476(B) 2011/06/06 08:54:58 PM
|-index.php 201(B) 2011/06/06 08:54:36 PM
|-kcaptcha.php 7(kB) 2011/06/06 08:58:18 PM
|-kcaptcha_config.php 1(kB) 2011/06/06 08:53:56 PM
|-util
|-font_preparer.php 1(kB) 2011/06/06 08:53:54 PM

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文