迅睿CMS框架是一款PHP8高性能·簡單易用的CMS開源開發(fā)框架,基于MIT開源許可協(xié)議發(fā)布,免費且不限制商業(yè)使用,是免費開源的產(chǎn)品,以萬端互聯(lián)為設計理念,支持的微信公眾號、小程序、APP客戶端、移動端網(wǎng)站、PC網(wǎng)站等多終端式管理系統(tǒng)。
聯(lián)系官方銷售客服
1835022288
028-61286886
不解壓縮的情況下獲取zip壓縮包目錄并生成前端樹
代碼是在前端頁面的,結合http://223987.com/wenda/62039.html
使用
配合jstree.js 使用 給各種文件圖標
<?php // 獲取文件路徑 $url = dr_get_file($down); $parts = parse_url($url); $path = $parts['path']; $zipName = '/www/wwwroot/tmp/' . $path; // 檢查緩存是否存在且未過期 $cacheName = 'tree-' . md5($zipName); $cacheDir = '/www/wwwroot/cache/'; $cacheFile = $cacheDir . $cacheName; $cacheTime = 3600; // 緩存時間,單位為秒 if (is_file($cacheFile) && (time() - filemtime($cacheFile) < $cacheTime)) { // 從緩存中獲取 HTML 樹 $html = file_get_contents($cacheFile, false, stream_context_create(['http' => ['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 = '<ul>'; foreach ($tree as $name => $subtree) { if (!empty($name)) { $ext = pathinfo($name, PATHINFO_EXTENSION); $html .= '<li'; if (!empty($subtree)) { $html .= ' class="jstree-open"'; } if (!empty($ext)) { $html .= ' data-jstree=\'{"type":"'.$ext.'"}\''; } $html .= '>' . htmlspecialchars($name); if (!empty($subtree)) { $html .= treeToHtml($subtree); } $html .= '</li>'; } else { $html .= treeToHtml($subtree); } } $html .= '</ul>'; return $html; } $html = treeToHtml($tree); // 關閉 zip 文件并保存 HTML 樹到緩存文件 $zip->close(); file_put_contents($cacheFile, $html); } // 輸出 HTML 樹 echo '<div id="jstree-basic">' . $html . '</div>'; ?> <script> $(document).ready(function() { function generateIconObject() { const icons = [ ['default', 'bx bx-folder'], ['doc', 'bx bxs-file-word text-primary'], ['docx', 'bx bxs-file-word text-primary'], ['xls', 'bx bxs-file-excel text-success'], ['xlsx', 'bx bxs-file-excel text-success'], ['ppt', 'bx bxs-file-powerpoint text-danger'], ['pptx', 'bx bxs-file-powerpoint text-danger'], ['pdf', 'bx bxs-file-pdf text-danger'], ['html', 'bx bxl-html5 text-warning'], ['css', 'bx bxl-css3 text-primary'], ['scss', 'bx bxl-sass text-primary'], ['js', 'bx bxl-javascript text-warning'], ['json', 'bx bxs-file-json text-success'], ['php', 'bx bxl-php text-primary'], ['py', 'bx bxl-python text-success'], ['rb', 'bx bxl-ruby text-danger'], ['java', 'bx bxl-java text-warning'], ['sql', 'bx bx-data text-danger'], ['xml', 'bx bx-code-alt text-primary'], ['csv', 'bx bxs-file-csv text-warning'], ['jpg', 'bx bx-image text-success'], ['jpeg', 'bx bx-image text-success'], ['png', 'bx bx-image text-success'], ['gif', 'bx bx-image text-success'] ]; const types = {}; icons.forEach(icon => { types[icon[0]] = { 'icon': icon[1] }; }); return types; } $('#jstree-basic').jstree({ 'plugins': ['types'], 'types': generateIconObject() }); }); </script>
加了緩存以及緩存判斷,但是是純php寫法,個人就單純使用在一個模板頁面里,就直接寫在模板里了,這里的需要可以拿去參考,提供了大部分jstree 圖標調(diào)用的代碼,缺點1:寫在html中的php,不是寫成函數(shù)什么的
缺點2:緩存時單純的文件緩存,當頁面大量的情況下,容易造成性能瓶頸及磁盤占用,使用內(nèi)存緩存 為優(yōu)
缺點3:緩存是訪問當前頁面,然后php進行一個if判斷緩存是否存在,不存在才進行一個創(chuàng)建,這樣并不是太友好,當頁面被采集等問題頻繁訪問可能導致服務器卡死,需要改進為 上傳文件 時進行緩存
代碼可以直接拿走復制黏貼直接使用,需要注意的點,
文件路徑
緩存路徑
// 初始化文件樹結構 $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]; } }
回復@又菜又愛玩 這塊有錯誤,需修改
最終版本: 解決問題1:文件夾優(yōu)先顯示 文件后顯示排序,而不是默認首字母解決問題2:獲取zip目錄時 當文件夾是中文, centos7 默認中文亂碼的問題
回復@又菜又愛玩 學習一下學習一下
配合jstree.js 使用 給各種文件圖標
加了緩存以及緩存判斷,但是是純php寫法,個人就單純使用在一個模板頁面里,就直接寫在模板里了,這里的需要可以拿去參考,提供了大部分jstree 圖標調(diào)用的代碼,
缺點1:寫在html中的php,不是寫成函數(shù)什么的
缺點2:緩存時單純的文件緩存,當頁面大量的情況下,容易造成性能瓶頸及磁盤占用,使用內(nèi)存緩存 為優(yōu)
缺點3:緩存是訪問當前頁面,然后php進行一個if判斷緩存是否存在,不存在才進行一個創(chuàng)建,這樣并不是太友好,當頁面被采集等問題頻繁訪問可能導致服務器卡死,需要改進為 上傳文件 時進行緩存
代碼可以直接拿走復制黏貼直接使用,需要注意的點,
文件路徑
緩存路徑
回復@又菜又愛玩 這塊有錯誤,需修改
最終版本:


解決問題1:文件夾優(yōu)先顯示 文件后顯示排序,而不是默認首字母
解決問題2:獲取zip目錄時 當文件夾是中文, centos7 默認中文亂碼的問題
回復@又菜又愛玩 學習一下學習一下
回復@又菜又愛玩 學習一下學習一下
回復@又菜又愛玩 學習一下學習一下