【问题标题】:PHP, Getting a Path to Image's Folder Not to Root's PathPHP,获取图像文件夹的路径而不是根路径
【发布时间】:2021-02-05 04:31:30
【问题描述】:

我有这个功能应该指向正确的图像文件夹(图像)并显示其图像,但它显示根路径中的所有图像和(图像)文件夹中的图像。我必须进行哪些更改才能使其仅显示属于 (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 );
}

【问题讨论】:

  • 您能否编辑您的问题以使代码在语法上正确?如果您正确缩进它也将有助于提高可读性。
  • @KIKOSoftware 我已尽力使其整洁,我只是从 DreamWeaver IDE 中复制了它。这是它的编码格式!
  • 这可能发生,但更重要的问题是{} 不平衡。
  • 它仍然不平衡,并且包含其他更微妙的错误。例如:字符串'.jpeg' 是 5 个字符长,而不是 4 个字符。不过,这段代码似乎是实现递归的正确方法,理论上应该可以工作。你检查过 PHP 错误信息吗?

标签: php image directory path


【解决方案1】:

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);

【讨论】:

    猜你喜欢
    • 2012-04-09
    • 2012-04-29
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 2013-02-25
    • 1970-01-01
    • 2011-07-31
    相关资源
    最近更新 更多