请参阅我尝试过的以下代码。
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的问题。 请帮忙!!!
答案 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对象,并包含其他各种属性供您使用。