PHP,获取图像文件夹的路径而不是根路径

时间:2020-10-22 07:40:43

标签: php image directory path

我具有此功能,该功能可以引导到正确的图像文件夹(图像)并显示其图像,但是它显示了根路径中的所有图像和(图像)文件夹中的所有图像。我必须要做些什么才能使其仅显示属于(images)文件夹的图像?。

function searchSite( $path = 'images', $level = 0 ) {
     $skip = array( 'cgi-bin', '.', '..' );
     $look_for = array( '.jpg', '.gif', '.png', '.jpeg' );
     $dh = @opendir( $path );
     while ( false !== ( $file = readdir( $dh ) ) ) {
          $file_ext = substr( $file, -4, 4 );
          if ( !in_array( $file, $skip ) ) {
              if ( is_dir( "$path/$file" ) ) {
                 searchSite( "$path/$file", ( $level + 1 ) );
                 } else if ( in_array( $file_ext, $look_for ) ) {
                    echo "<option value='$path/$file' />$file</option>";
    } 
  }
  closedir( $dh );
}

1 个答案:

答案 0 :(得分:2)

PHP拥有自己的文件系统和过滤器类。使用这些类,您可以轻松地在目录树上递归地迭代以获取所需的所有文件。如今,不赞成编写自己的功能,因为迭代器和过滤器类的构建效率更高,并且无需重新发明轮子。

这是一个简短的示例,说明如何使用内置文件系统和过滤器类。

<?php
declare(strict_types=1);
namespace Marcel;

use FilesystemIterator;
use RecursiveCallbackFilterIterator;
use RecursiveDirectoryIterator;
use RecursiveIteratorIterator;

$directory = new RecursiveDirectoryIterator('../assets/images/', FilesystemIterator::FOLLOW_SYMLINKS);
$filter = new RecursiveCallbackFilterIterator($directory, function($current, $key, $iterator) {
    if ($current->isDir()) {
        return !in_array($current->getFilename(), ['.', '..', 'bla']);
    } else {
        return in_array($current->getExtension(), ['jpg', 'png']);
    }
});

$iterator = new RecursiveIteratorIterator($filter);

$files = [];
foreach ($iterator as $file) {
    $files[] = $file->getPathname();
}

var_dump($files);