如何在没有 javascript 的情况下使用 php 列出目录以浏览文件夹?

编程入门 行业动态 更新时间:2024-10-08 08:23:02
本文介绍了如何在没有 javascript 的情况下使用 php 列出目录以浏览文件夹?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在寻找这个 PHP 函数:

  • 列出目录,递归
  • 浏览文件夹的功能
  • 没有 JavaScript
  • 通过网络地址、?p=2|1"或类似内容导航
  • 按类型排序,然后按名称排序

解决方案

root = realpath($root);如果 ($active !== null) {$this->active = realpath($this->root .'/' . $active);}}公共函数 isActive($element) {return substr($this->active, 0, strlen($element->getPathname())) === $element->getPathname();}公共函数 getLink($element) {返回 '​​?'.http_build_query(数组(self::URL_KEY =>substr($element->getPathname(), strlen($this->root))));}受保护的函数 _get(Iterator $it) {$result = array();$dirs = $files = array();foreach ($it as $entry) {如果 ($entry->isDir()) {$data = (object)array('类型' =>'目录','名称' =>$entry->getBasename(),'对象' =>$entry);如果 ($this->isActive($entry)) {$data->children = $this->_get($it->getChildren());$data->active = true;}$dirs[$entry->getBasename()] = $data;}别的 {$files[$entry->getFilename()] = (object)array('类型' =>'文件','名称' =>$entry->getFilename(),'对象' =>$条目,'活跃' =>$this->isActive($entry));}}uksort($dirs, 'strnatcmp');uksort($files, 'strnatcmp');返回 array_values(array_merge($dirs, $files));}公共函数 get() {返回 $this->_get(new RecursiveDirectoryIterator($this->root));}公共函数 outputUl($dirTree = null) {如果($dirTree === null){$dirTree = $this->get();}echo '
    ';foreach ($dirTree 作为 $element) {$classes = array($element->type);if ($element->type === 'dir') {如果 ($element->active) {$classes[] = '活动';}echo '<li class="', implode(' ', $classes), '">';echo 'getLink($element->object),'">';echo $element->name;回声'</a>';如果 (sizeof($element->children) > 0) {$this->outputUl($element->children);}echo '</li>';}别的 {如果 ($element->active) {$classes[] = '活动';}echo '<li class="', implode(' ', $classes), '">';echo 'getLink($element->object),'">';echo $element->name;回声'</a>';echo '</li>';}}回声'</ul>';}}?><!DOCTYPE html><头><meta charset="utf-8"><title>目录树</title><style type="text/css">#dirTree a {文字装饰:无;颜色:#171717;}#dirTree .file a {颜色:#999999;}#dirTree .active >一个 {字体粗细:粗体;}</风格><身体><div id="dirTree"><?php$dirTree = 新目录树('.',isset($_GET[DirTree::URL_KEY]) ?$_GET[DirTree::URL_KEY] : null);$dirTree->outputUl();?>

    I am looking for this PHP function:

    • List a directory, recursive
    • The functionallity to navigate through folders
    • No javascript
    • Navigation via web adress, "?p=2|1" or something like that
    • Sorted by type then names

    解决方案

    <?php class DirTree { protected $root; protected $active; const URL_KEY = 'el'; public function __construct($root, $active = null) { $this->root = realpath($root); if ($active !== null) { $this->active = realpath($this->root . '/' . $active); } } public function isActive($element) { return substr($this->active, 0, strlen($element->getPathname())) === $element->getPathname(); } public function getLink($element) { return '?' . http_build_query(array( self::URL_KEY => substr($element->getPathname(), strlen($this->root)) )); } protected function _get(Iterator $it) { $result = array(); $dirs = $files = array(); foreach ($it as $entry) { if ($entry->isDir()) { $data = (object)array( 'type' => 'dir', 'name' => $entry->getBasename(), 'object' => $entry ); if ($this->isActive($entry)) { $data->children = $this->_get($it->getChildren()); $data->active = true; } $dirs[$entry->getBasename()] = $data; } else { $files[$entry->getFilename()] = (object)array( 'type' => 'file', 'name' => $entry->getFilename(), 'object' => $entry, 'active' => $this->isActive($entry) ); } } uksort($dirs, 'strnatcmp'); uksort($files, 'strnatcmp'); return array_values(array_merge($dirs, $files)); } public function get() { return $this->_get( new RecursiveDirectoryIterator($this->root) ); } public function outputUl($dirTree = null) { if ($dirTree === null) { $dirTree = $this->get(); } echo '<ul>'; foreach ($dirTree as $element) { $classes = array($element->type); if ($element->type === 'dir') { if ($element->active) { $classes[] = 'active'; } echo '<li class="', implode(' ', $classes), '">'; echo '<a href="', $this->getLink($element->object),'">'; echo $element->name; echo '</a>'; if (sizeof($element->children) > 0) { $this->outputUl($element->children); } echo '</li>'; } else { if ($element->active) { $classes[] = 'active'; } echo '<li class="', implode(' ', $classes), '">'; echo '<a href="', $this->getLink($element->object),'">'; echo $element->name; echo '</a>'; echo '</li>'; } } echo '</ul>'; } } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>DirTree</title> <style type="text/css"> #dirTree a { text-decoration: none; color: #171717; } #dirTree .file a { color: #999999; } #dirTree .active > a { font-weight: bold; } </style> </head> <body> <div id="dirTree"> <?php $dirTree = new DirTree( '.', isset($_GET[DirTree::URL_KEY]) ? $_GET[DirTree::URL_KEY] : null ); $dirTree->outputUl(); ?> </div> </body> </html>

更多推荐

如何在没有 javascript 的情况下使用 php 列出目录以浏览文件夹?

本文发布于:2023-11-01 01:04:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1547797.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:文件夹   情况下   目录   如何在   javascript

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!