列出所有文件夹和子文件夹中的所有.jpg文件

时间:2020-03-21 18:33:22

标签: php

我想列出文件夹和子文件夹中的所有.jpg文件。

我有简单的代码:

dependencies

但这会列出img文件夹中的<?php // directory $directory = "img/*/"; // file type $images = glob("" . $directory . "*.jpg"); foreach ($images as $image) { echo $image."<br>"; } ?> 个文件,然后是一个。

如何扫描所有子文件夹?

2 个答案:

答案 0 :(得分:0)

由于目录可以包含子目录,而子目录又包含子目录,因此我们应该使用递归函数。 glob()在这里还不够。这可能对您有用:

<?php
function getDir4JpgR($directory) {
  if ($handle = opendir($directory)) {
    while (false !== ($entry = readdir($handle))) {
      if($entry != "." && $entry != "..") {

        $str1 = "$directory/$entry";

        if(preg_match("/\.jpg$/i", $entry)) {
          echo $str1 . "<br />\n";          
        } else {
          if(is_dir($str1)) {
             getDir4JpgR($str1);
          }
        }       
      }
    }
    closedir($handle);
  }
}

//
// call the recursive function in the main block:
//
// directory
$directory = "img";

getDir4JpgR($directory);
?>

我将其放入名为listjpgr.php的文件中。在我的Chrome浏览器中,它捕获了以下内容:

enter image description here

答案 1 :(得分:0)

Php带有DirectoryIterator,在这种情况下非常有用。 请注意,可以通过将整个路径添加到文件而不是唯一的文件名来轻松改进此简单功能,并且可以使用其他名称代替引用。

  /*
   *  Find all file of the given type.
   *  @dir : A directory from which to start the search
   *  @ext : The extension. XXX : Dont call it with "." separator
   *  @store : A REFERENCE to an array on which store the element found.
   * */
  function allFileOfType($dir, $ext, &$store) {
    foreach(new DirectoryIterator($dir) as $subItem) {
      if ($subItem->isFile() && $subItem->getExtension() == $ext)
        array_push($store, $subItem->getFileName());
      elseif(!$subItem->isDot() && $subItem->isDir())
        allFileOfType($subItem->getPathName(), $ext, $store);
    }
  }

  $jpgStore = array();
  allFileOfType(__DIR__, "jpg", $jpgStore);
  print_r($jpgStore);