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

Php 如何打印目录和子目录列表以及子目录中的文件,php,Php,请看下面的代码,我已经试过了 echo scanDirectoryImages("Images"); function scanDirectoryImages($directory, array $exts = array('jpeg', 'jpg', 'gif', 'png')) { $html = ''; if ( is_readable($directory) && (file_exists($directory) || is_dir($direct

请看下面的代码,我已经试过了

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;
}
echo扫描目录图像(“图像”);
函数ScandDirectoryImages($directory,array$exts=array('jpeg','jpg',',
“gif”、“png”)
{
$html='';
如果(
是否可读($directory)
&&(文件_exists($directory)| is_dir($directory))
) {
$directoryList=opendir($directory);
而($file=readdir($directoryList)){
如果($file!='.&&$file!='..')){
$path=$directory.'/'.$file;
if(是否可读($path)){
if(is_dir($path)){
返回ScanDirectoryImage($path,$exts);
}
如果(
is_文件($path)
&&在_数组中(end(explode('.',end(explode('/'),$path)),
$exts)
) {
$html.='';
}
}
}
}
closedir($directoryList);
}
返回$html;
}
它只返回我的子目录中的图像,而不返回我实际需要的子目录路径。 另外,我正在服务器上工作,而不是本地主机,这给设置$path带来了问题。
请帮忙

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

这就利用了各种各样的过滤器

filterierator::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
实际上是一个对象,并包含其他各种属性供您使用。

这是一个递归函数。并且确保它仅在使用参数('jpeg'、'jpg'、'png'、'gif')调用函数时列出图像。您需要做的不仅仅是复制粘贴代码,而是理解它并修改它,使其符合您的需要
if(is_dir($path)){return scanDirectoryImages($path,$exts);}
是您感兴趣的问题。为了给您指出正确的方向,请对in_数组使用严格模式@hanshenrik在这里可能不是问题,因为strtolower中包装的getExtension只能返回字符串。但我很高兴补充一句。