【问题标题】:List content of directory (php)列出目录的内容 (php)
【发布时间】:2011-06-10 02:51:15
【问题描述】:


我有一个文件夹。我想将此文件夹中的每个文件放入一个数组中,然后我想在 foreach 循环中回显它们。
最好的方法是什么?
谢谢!

【问题讨论】:

    标签: php arrays directory


    【解决方案1】:

    这也适用于子文件夹中的文件和文件夹。返回文件夹列表和文件列表及其路径。

    
    
        $dir = __DIR__; //work only for this current dir
        function listFolderContent($dir,$path=''){
            $r = array();
            $list = scandir($dir);
            foreach ($list as $item) {
                if($item!='.' && $item!='..'){
                    if(is_file($path.$item)){
                        $r['files'][] = $path.$item;
                    }elseif(is_dir($path.$item)){
                        $r['folders'][] = $path.$item;
                        $sub = listFolderContent($path.$item,$path.$item.'/');
                        if(isset($sub['files']) && count($sub['files'])>0)
                            $r['files'] = isset ($r['files'])?array_merge ($r['files'], $sub['files']):$sub['files'];
                        if(isset($sub['folders']) && count($sub['folders'])>0)
                            $r['folders'] = array_merge ($r['folders'], $sub['folders']);
                    }
                }
            }
            return $r;
        }
        $list = listFolderContent($dir);
        var_dump($list['files']);
        var_dump($list['folders']);
    

    【讨论】:

      【解决方案2】:

      另一种选择:

      define('PATH', 'files/');
      
      $filesArray = array();
      $filesArray = glob(PATH . '*', GLOB_ONLYDIR);
      

      此方法允许您按文件类型指定/过滤。例如,

      define('PATH', 'files/');
      define('FILE_TYPE', '.jpg');
      
      $filesArray = array();
      $filesArray = glob(PATH . '*' . FILE_TYPE, GLOB_ONLYDIR);
      

      您还可以通过删除参数“GLOB_ONLYDIR”来获取文件的完整路径名

      【讨论】:

        【解决方案3】:

        编辑:dwich 答案更好。我会留下这个仅供参考。

        readdir。

        <?php
        
        if ($handle = opendir('/path/to/dir')) {
            echo "Directory handle: $handle\n";
            echo "Files:\n";
        
            while (false !== ($file = readdir($handle))) {
                echo "$file\n";
            }
        
            closedir($handle);
        }
        ?>
        

        希望这会有所帮助。
        ——阿尔贝托

        【讨论】:

          【解决方案4】:

          Scandir 是您正在寻找的 http://php.net/manual/en/function.scandir.php

          <?php
          $dir    = '/tmp';
          $files1 = scandir($dir);
          
          print_r($files1);
          ?>
          

          或者使用 opendir 和 readdir 的组合 http://php.net/manual/en/function.readdir.php

          【讨论】:

          • 我认为这比 readdir 好,即使它只是 PHP 5。+1 因为示例。
          【解决方案5】:

          没有比这更容易的了

          http://ca3.php.net/manual/en/function.scandir.php

          不要忘记在 linux 上过滤掉隐藏目录和父目录(它们以点开头)。

          【讨论】:

            猜你喜欢
            • 2013-12-07
            • 1970-01-01
            • 2019-01-11
            • 1970-01-01
            • 2013-08-04
            • 2010-12-16
            • 2019-02-27
            • 2019-09-05
            • 1970-01-01
            相关资源
            最近更新 更多