PHP-php 生成以某一目录为根节点的文件信息树状结构
给定某一目录文件夹,用php生成以该目录为根节点树状文件信息,文件信息包括文件名、文件大小及更新时间。
那位兄才给个能满足上面需求的自定义函数,谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
给定某一目录文件夹,用php生成以该目录为根节点树状文件信息,文件信息包括文件名、文件大小及更新时间。
那位兄才给个能满足上面需求的自定义函数,谢谢!
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
根据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;
}
<?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