检测文件目录及其子文件到底的代码-实现可展开的目录列表和文件浏览功能的HTML代码

此实现了一个可展开的目录列表和文件浏览功能

该代码通过PHP实现了扫描指定目录下的文件和目录,并按照一定的排序规则进行展示。

用户可以点击目录名称,展开或折叠该目录下的子目录和文件列表。

对于文件,显示了文件名、修改时间和文件大小,并提供了文件链接以在新标签页中打开文件。

对于空目录,显示了"Empty Directory"的提示。此外,代码还提供了文件大小格式化的函数,将文件大小转换为易读的单位(如KB、MB、GB等)。

该代码通过HTML、CSS和JavaScript实现,为网页添加了一种直观和友好的目录浏览方式,方便用户快速查找和访问文件。

<!DOCTYPE html>
<html>
<head>
    <title>Directory Listing</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
        }

        .directory {
            font-weight: bold;
            margin-bottom: 10px;
            cursor: pointer;
            display: flex;
            align-items: center;
        }

        .directory-icon {
            margin-right: 5px;
        }

        .file {
            margin-left: 20px;
            display: flex;
            align-items: center;
        }

        .indent {
            margin-left: 20px;
        }

        .collapsed {
            display: none;
        }

        .empty-directory {
            background-color: #C0FFC0;
        }
        .table {
        border-collapse: collapse;
        }

        td {
        padding: 5px;
        border: none;
        }

        .left {
        text-align: left;
        width: 250px; /* 调整大小文本的列宽 */
        }

        .center {
        text-align: center;
        width: 180px; /* 调整大小文本的列宽 */
        }

        .right {
        text-align: right;
        width: 110px; /* 调整大小文本的列宽 */
        }

    </style>
    <script>
        function toggleDirectory(element) {
            var subDirectory = element.nextElementSibling;
            if (subDirectory.style.display === 'none') {
                subDirectory.style.display = 'block';
            } else {
                subDirectory.style.display = 'none';
            }
        }
    </script>
</head>
<body>
<h2>Directory Listing</h2>
<table class="table">
  <tr>
    <td class="left">文件名</td>
    <td class="center">Date 修改时间</td>
    <td class="right">大小</td>
  </tr>
</table>


<div style="width:650px;">
    <hr>
    <?php
    function listDirectoriesAndFiles($dir, $indent = '') {
        $result = '';

        // 扫描当前目录下的文件和目录
        $files = scandir($dir);

        $directories = [];
        $filesList = [];

        foreach ($files as $file) {
            if ($file === '.' || $file === '..') {
                continue;
            }

            $filePath = $dir . '/' . $file;

            if (is_dir($filePath)) {
                // 如果是目录,将目录名添加到 $directories 数组
                $directories[] = $file;
            } else {
                // 如果是文件,将文件名添加到 $filesList 数组
                $filesList[] = $file;
            }
        }

        // 对目录和文件列表进行排序
        sort($directories);
        sort($filesList);

        // 输出目录列表
        foreach ($directories as $directory) {
            $subDirectoriesAndFiles = listDirectoriesAndFiles($dir . '/' . $directory, $indent . '<span class="indent"></span>');

            $result .= '<div class="directory" onclick="toggleDirectory(this)">';
            $result .= $indent . '<span class="directory-icon">&#128194;</span>' . $directory . '->';
            $result .= '</div>';

            $result .= '<div class="collapsed">';
            $result .= $subDirectoriesAndFiles;
            $result .= '</div>';
        }
        
        $result .= '<table class="table file">';
        // 输出文件列表
        foreach ($filesList as $file) {
            $filePath = $dir . '/' . $file;
            $fileSize = filesize($filePath);
            $fileSizeFormatted = formatFileSize($fileSize);
            $fileModified = date("Y-m-d H:i:s", filemtime($filePath));

            $result .= '<tr>';
            $result .= '<td class="left"><a href="' . $filePath . '" target="_blank">' . $file . '</a></td>';
            $result .= '<td class="center">' . $fileModified . '</td>';
            $result .= '<td class="right">' . $fileSizeFormatted . '</td>';
            $result .= '</tr>';
        }
        $result .= '</table>';
        $result .= '<div style="border: 1px dashed green; width: 650px;"></div>';


        if (empty($directories) && empty($filesList)) {
            $result .= '<div class="file empty-directory">';
            $result .= $indent . 'Empty Directory';
            $result .= '</div>';
        }

        return $result;
    }

    function formatFileSize($size) {
        $units = array('B', 'KB', 'MB', 'GB', 'TB');
        $i = 0;
        while ($size >= 1024 && $i < 4) {
            $size /= 1024;
            $i++;
        }
        return round($size, 2) . $units[$i];
    }

    // 获取当前目录路径
    $dir = './';

    // 获取当前目录下的所有目录和文件
    $directoriesAndFiles = listDirectoriesAndFiles($dir);

    // 输出目录和文件列表
    echo $directoriesAndFiles;
    ?>
</div>

</body>
</html>

第二种使用div

<!DOCTYPE html>
<html>
<head>
    <title>Directory Listing</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
        }

        .directory {
            font-weight: bold;
            margin-bottom: 10px;
            cursor: pointer;
            display: flex;
            align-items: center;
        }

        .directory-icon {
            margin-right: 5px;
        }

        .file {
            margin-left: 20px;
        }

        .file a {
            text-decoration: none;
            color: #0000EE;
        }

        .file a:hover {
            text-decoration: underline;
        }

        .indent {
            margin-left: 20px;
        }

        .collapsed {
            display: none;
        }

        .file-size {
            margin-right: 50px;
        }
    </style>
    <script>
        function toggleDirectory(element) {
            var subDirectory = element.nextElementSibling;
            if (subDirectory.style.display === 'none') {
                subDirectory.style.display = 'block';
            } else {
                subDirectory.style.display = 'none';
            }
        }
    </script>
</head>
<body>
<h2>Index of /Directory Listing/</h2>


<div style="width:650px;">
<div class="file">
	<span style="margin-right: 265px;">文件/文件夹</span>
    <span style="margin-right: 95px;">大小</span>
    <span class="file-modified" >Date 修改时间</span>
</div>
<hr>
<?php
function listDirectoriesAndFiles($dir, $indent = '') {
    $result = '';

    // 扫描当前目录下的文件和目录
    $files = scandir($dir);

    $directories = [];
    $filesList = [];

    foreach ($files as $file) {
        if ($file === '.' || $file === '..') {
            continue;
        }

        $filePath = $dir . '/' . $file;

        if (is_dir($filePath)) {
            // 如果是目录,将目录名添加到 $directories 数组
            $directories[] = $file;
        } else {
            // 如果是文件,将文件名添加到 $filesList 数组
            $filesList[] = $file;
        }
    }

    // 对目录和文件列表进行排序
    sort($directories);
    sort($filesList);

    // 输出目录列表
    foreach ($directories as $directory) {
        $result .= '<div class="directory" onclick="toggleDirectory(this)">';
        $result .= $indent . '<span class="directory-icon">&#128194;</span>' . $directory . '->';
        $result .= '</div>';
        $result .= '<div class="collapsed">';
        $subDirectoriesAndFiles = listDirectoriesAndFiles($dir . '/' . $directory, $indent . '<span class="indent"></span>');
        $result .= $subDirectoriesAndFiles;
        $result .= '</div>';
    }

    // 输出文件列表
    foreach ($filesList as $file) {
        $filePath = $dir . '/' . $file;
        $fileSize = filesize($filePath);
        $fileSizeFormatted = formatFileSize($fileSize);
        $fileModified = date("Y-m-d H:i:s", filemtime($filePath));
        $result .= '<div class="file">' . $indent . '<a href="' . $filePath . '" target="_blank">' . $file . '</a>';
        $result .= '<span style="float: right;">' . $fileModified . '</span>';
        $result .= '<span class="file-size" style="float: right;">' . $fileSizeFormatted . '</span>';
        $result .= '</div>';
    }
    $result .= '<br>';
    return $result;
}

function formatFileSize($size) {
    $units = array('B', 'KB', 'MB', 'GB', 'TB');
    $i = 0;
    while ($size >= 1024 && $i < 4) {
        $size /= 1024;
        $i++;
    }
    return round($size, 2) . $units[$i];
}

// 获取当前目录路径
$dir = './';

// 获取当前目录下的所有目录和文件
$directoriesAndFiles = listDirectoriesAndFiles($dir);

// 输出目录和文件列表
echo $directoriesAndFiles;
?>

</div>

</body>
</html>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值