如何打印目录和子目录列表以及子目录中的文件

时间:2017-10-10 09:14:45

标签: php

请参阅我尝试过的以下代码。

echo scanDirectoryImages("Images");


function scanDirectoryImages($directory, array $exts = array('jpeg', 'jpg', 
'gif', 'png'))
{

$html = '';
if (
    is_readable($directory)
    && (file_exists($directory) || is_dir($directory))
) {
    $directoryList = opendir($directory);
    while($file = readdir($directoryList)) {
        if ($file != '.' && $file != '..') {
            $path = $directory . '/' . $file;
            if (is_readable($path)) {
                if (is_dir($path)) {
                    return scanDirectoryImages($path, $exts);
                }
                if (
                    is_file($path)
                    && in_array(end(explode('.', end(explode('/', $path)))),   
$exts)
                ) {
                    $html .= '<img src="' . $path
                        . '" style="max-height:200px;max-width:200px" 
value="<?php echo basename($path)"/>  ';
                }
            }
        }
    }
    closedir($directoryList);
}
return $html;
}

它只返回子目录中的图像,但不返回我真正想要的子目录路径。 此外,我正在服务器而不是localhost,这会产生设置$ path的问题。 请帮忙!!!

1 个答案:

答案 0 :(得分:2)

我想向您展示一种非常简单的方法,可以从目录中获取具有特定扩展名的所有文件。

这会使用各种Iterators和过滤器

FilterIterator::accept()是迭代中包含文件的规则。

class ImagesOnlyFilterIterator extends FilterIterator
{
  function accept()
  {
    return in_array( strtolower( $this->current()->getExtension() ), array( 'jpeg', 'jpg', 'gif', 'png', 'bmp', 'tif', 'tiff' ), true );
  }
}

$path = '/foo/bar/whatever';

foreach( new ImagesOnlyFilterIterator( new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $path ) ) ) as $image )
{
  echo $image . PHP_EOL;
}

$image实际上是SplFileInfo对象,并包含其他各种属性供您使用。