太阳成游戏网站

联系官方销售客服

QQ1835022299

028-61286886

分享经验 版主:论坛审计组
不解压缩的情况下获取zip压缩包目录并生成前端树
类型:太阳成游戏网站CMS 更新时间:2023-08-30 15:50:45


不解压缩的情况下获取zip压缩包目录并生成前端树


代码是在前端页面的,结合/wenda/62039.html

使用

open($zipName);
$tree = array();
for ($i = 0; $i < $zip->numFiles; $i++) {
    $filename = $zip->getNameIndex($i);
    $path = explode('/', $filename);
    $node = &$tree;
    foreach ($path as $dir) {
        if (!isset($node[$dir])) {
            $node[$dir] = array();
        }
        $node = &$node[$dir];
    }
}
function treeToHtml($tree) {
    $html = '
    ';     foreach ($tree as $name => $subtree) {         if (!empty($name)) {             $html .= '
  • ';             $html .= $name;             if (!empty($subtree)) {                 $html .= treeToHtml($subtree);             }             $html .= '
  • ';         } else {             $html .= treeToHtml($subtree);         }     }     $html .= '
';     return $html; } $html = treeToHtml($tree); echo $html; $zip->close();        ?>

回帖
  • 又菜又爱玩
    #1楼    又菜又爱玩
    2023-03-08 17:13:24
    Chrome 0

    image
    配合jstree.js 使用 给各种文件图标
  • 又菜又爱玩
    #2楼    又菜又爱玩
    2023-03-09 08:01:14
    Chrome 0
     ['timeout' => 5]]));
    } else {
        // 打开 zip 文件并获取文件结构
        $zip = new ZipArchive();
        $zip->open($zipName);
    
        // 初始化文件树结构
        $tree = [];
        for ($i = 0; $i < $zip->numFiles; $i++) {
            $filename = $zip->getNameIndex($i);
            $path = explode('/', $filename);
            $node = &$tree;
            foreach ($path as $dir) {
                $node = &$node[$dir] ?? ($node[$dir] = []);
            }
        }
    
    
        // 生成 HTML 树
        function treeToHtml($tree) {
        $html = '
      '; foreach ($tree as $name => $subtree) { if (!empty($name)) { $ext = pathinfo($name, PATHINFO_EXTENSION); $html .= 'close(); file_put_contents($cacheFile, $html); } // 输出 HTML 树 echo '
      ' . $html . '
      '; ?>
    加了缓存以及缓存判断,但是是纯php写法,个人就单纯使用在一个模板页面里,就直接写在模板里了,这里的需要可以拿去参考,提供了大部分jstree 图标调用的代码,
    缺点1:写在html中的php,不是写成函数什么的
    缺点2:缓存时单纯的文件缓存,当页面大量的情况下,容易造成性能瓶颈及磁盘占用,使用内存缓存 为优缺点3:缓存是访问当前页面,然后php进行一个if判断缓存是否存在,不存在才进行一个创建,这样并不是太友好,当页面被采集等问题频繁访问可能导致服务器卡死,需要改进为 上传文件 时进行缓存
    代码可以直接拿走复制黏贴直接使用,需要注意的点,
    文件路径缓存路径
  • 又菜又爱玩
    #3楼    又菜又爱玩
    2023-03-09 08:50:03
    Chrome 0
    // 初始化文件树结构
        $tree = [];
        for ($i = 0; $i < $zip->numFiles; $i++) {
            $filename = $zip->getNameIndex($i);
            $path = explode('/', $filename);
            $node = &$tree;
            foreach ($path as $dir) {
                if (!isset($node[$dir])) {
                    $node[$dir] = [];
                }
                $node = &$node[$dir];
            }
        }
    又菜又爱玩 这块有错误,需修改
  • 又菜又爱玩
    #4楼    又菜又爱玩
    2023-03-10 10:10:32
    Chrome 0
    ********此内容需要回复后才能看到********
    最终版本:
    解决问题1:文件夹优先显示 文件后显示排序,而不是默认首字母
    解决问题2:获取zip目录时 当文件夹是中文, centos7 默认中文乱码的问题


    image


    image
  • 远策
    #5楼    远策
    2023-05-22 14:28:40
    Chrome 0
    学习一下a学习一下a
  • 远策
    #6楼    远策
    2023-05-22 14:35:11
    Chrome 0
    又菜又爱玩 学习一下学习一下
  • html
    #7楼    html
    2023-05-23 11:39:40
    Chrome 0
    又菜又爱玩 学习一下学习一下
  • atv17690943
    #8楼    atv17690943
    2023-08-05 15:47:02
    Edge 0
    学习一下学习一下
  • atv17690943
    #9楼    atv17690943
    2023-08-05 15:47:58
    Edge 0
    又菜又爱玩 学习一下学习一下
  • 听海
    #10楼    听海
    2023-08-30 15:50:45
    Firefox 116.0 0
    学习一下学习一下