【问题标题】:PHP Directory, subdirectory and file Listing default sort orderPHP 目录、子目录和文件列表默认排序顺序
【发布时间】:2015-04-27 02:02:32
【问题描述】:

我想使用 php 列出所有目录、子目录和文件。

我已尝试以下代码。它返回所有目录、子目录和文件,但显示顺序不正确。

例如:默认顺序是 1dir、2dir、7dir、8dir,而在浏览器中显示 1dir、8dir、7dir、2dir,这是不正确的。

代码:

       function createDir($path = '.')
       {
     if ($handle = opendir($path))
             {
               echo "<ul>";

      while (false !== ($file = readdir($handle)))
      {



   if (is_dir($path.$file) && $file != '.' && $file !='..') {
            printSubDir($file, $path);
         }
               else if ($file != '.' && $file !='..'){
         $allowed = array('pdf','doc','docx','xls','xlsx','jpg','png','gif','mp4','avi','3gp','flv','mov','PDF','DOC','DOCX','XLS','XLSX','JPG','PNG','GIF','MP4','AVI','3GP','FLV','MOV','html','HTML','css','CSS','js','JS');
    $ext = pathinfo($file, PATHINFO_EXTENSION);
   if(in_array($ext,$allowed) ) {
   $queue[] = $file;

 }
  }

   }

   printQueue($queue, $path);
  echo "</ul>";
    }
   }

       function printQueue($queue, $path)
            {

          sort($queue);
           foreach ($queue as $file)
        {
                  //printFile($file, $path);
       }
       }

        function printFile($file, $path) {

 echo "<li><a href=\"".$path.$file."\" target='_blank'>$file</a></li>";

             }

            function printSubDir($dir, $path)
        {
         echo "<li><span class=\"toggle\">$dir</span>";
        createDir($path.$dir."/");
     echo "</li>";
   }

         createDir($path);
    ?>

需要帮助来修复代码并以正确的顺序显示目录、子目录和文件。

【问题讨论】:

标签: php file function directory subdirectory


【解决方案1】:

我在列出目录文件时遇到了同样的问题。但我用过DirectoryLister 这段代码非常有用。您可以轻松列出您的文件。

您可以通过以下步骤来实现它。

  1. 下载并提取目录列表器
  2. 将 resources/default.config.php 复制到 resources/config.php
  3. 将 index.php 和资源文件夹上传到您要列出的文件夹中
  4. 将附加文件上传到与 index.php 相同的目录

希望对你有帮助

【讨论】:

    【解决方案2】:

    您可以从循环数组并打印每个目录开始:

    public function dirtree($dir, $regex='', $ignoreEmpty=false) {
    
        if (!$dir instanceof DirectoryIterator) {
            $dir = new DirectoryIterator((string)$dir);
        }
    
        $dirs  = array();
        $files = array();
        foreach ($dir as $node) {
            if ($node->isDir() && !$node->isDot()) {
                // print_r($node);
                $tree = dirtree($node->getPathname(), $ignoreEmpty);
                    // print"<pre>";print_r($tree);
                if (!$ignoreEmpty || count($tree)) {
                    $dirs[$node->getFilename()] = $tree;
                }
            } elseif ($node->isFile()) {
                $name = $node->getFilename();
                //if ('' == $regex || preg_match($regex, $name)) {
                    $files[] = $name;
    
            }
        }
        asort($dirs);
        sort($files);
        return array_merge($files, $dirs);
    }
    

    这样使用:

    $fileslist = dirtree('root');
    
    echo "<pre style='font-size:15px'>";
    
    print_r($fileslist);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      • 2022-11-12
      相关资源
      最近更新 更多