在目录树中查找具有给定扩展名的文件

时间:2012-03-17 07:56:17

标签: php filenames

我有一个文件夹,其中有一些文件和子文件夹。我需要返回具有给定扩展名的文件名或相对地址(如果文件位于子文件夹中),例如.html

例如,这是给定文件夹的结构:

  • /text/something.ncx
  • /text/123.html
  • content.opf
  • toc.ncx
  • Flow_0.html
  • Flow_1.html
  • Flow_2.html

所以代码应该返回它(理想情况下在数组中):

  • 文本/ 123.html
  • Flow_0.html
  • Flow_1.html
  • Flow_2.html

它只是提取.html扩展名,但我真的不知道如何解决这个问题。

4 个答案:

答案 0 :(得分:10)

您可以使用RecursiveDirectoryIterator递归获取所有文件,然后使用RegexIterator过滤结果,以仅迭代*.html个文件。要获取相对地址,可以使用RecursiveDirectoryIterator::getSubPathname()

$directory  = '../path/to/your/folder';
$all_files  = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
$html_files = new RegexIterator($all_files, '/\.html$/');

foreach($html_files as $file) {
    echo $html_files->getSubPathname(), PHP_EOL;
}

如果你确实需要和数组(通常没有可迭代对象),你可以轻松地在foreach而不是echo每个子路径中构建一个。

答案 1 :(得分:1)

列出文件夹中的文件(将$ directory值更改为首选dirname,@ $ files将您的扩展名从.txt更改为首选目录。

$directory = "../images/team/harry/";


$files = glob($directory . "*.txt");


foreach($files as $file)
{
echo $file;
}

答案 2 :(得分:0)

您可以使用glob function

glob('*.html')

答案 3 :(得分:-1)

您可以简单地使用此

<h1>

$Dir = 'you dir/';
$File = scandir($Dir);
$Type = pathinfo($File[$x],PATHINFO_EXTENSION);
if (strtolower($Type) === 'html'){
         echo $File;
}
<H2>