在PHP中递归收集图像文件路径

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了在PHP中递归收集图像文件路径脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究一个非常大的 PHP类,它通过命令行从图像优化中完成很多工作,你基本上将程序传递给一个Image路径或一个文件夹路径,里面有多个图像.然后,它通过最多5个其他命令行程序运行文件,以优化图像.

下面是收集图像路径的循环的一部分,如果路径是文件夹而不是图像路径,它将遍历文件夹中的所有图像并将它们添加到图像阵列.

到目前为止,我已经在1个文件夹中为单个图像和图像工作了.我想修改下面的这一部分,以便它可以递归地再深入1个文件夹来获取图像路径.

有人可能会告诉我如何修改下面这个来完成这个吗?

// Get files 
if (is_dir($path))
{
    echo 'the path is a directory,grab images in this directory';
    $handle = opendir($path);
    // FIXME : need to run recursively
    while(FALSE !== ($file = readdir($handle))) 
    {
        if(is_dir($path.self::DS.$file))
        {
            continue;
        }
        if( ! self::is_image($path.self::DS.$file))
        {
            continue;
        }
        $files[] = $path.self::DS.$file;
    }
    closedir($handle);



}else{
    echo 'the path is an Image and NOT a directory';
    if(self::is_image($path))
    {   
        echo 'assign image Paths to our image array to PRocess = '. $path. '<br><br>';
        $files[] = $path;
    }
}

if (!count($files))
{
    throw new NoImageFoundException("Image not found : $path");
}

UPDATE

@Chris的回答让我看了Docs,我找到了一个修改过的例子似乎有效

public static function find_recursive_images($path) {
    $ITerator = new RecursiveiteratorIterator(new Recursivedirectoryiterator($path),RecursiveIteratorIterator::CHILD_First);
    foreach ($iterator as $path) {
      if ($path->isDir()) {
         //skip directories
         continue;
      } else {
         $files[] = $path->__toString();
      }
    }
    return $files;
}

$files = self::find_recursive_images($path);
echo '<pre>';
print_r($files);
echo '</pre>';
exit();

输出只是文件名和这样的路径这是我的最终目标,到目前为止,这是完美的,但一如既往有一个更好的方式我所有的改善

(
    [0] => E:\Server\_ImageOptimize\img\testfiles\css3-generator.png
    [1] => E:\Server\_ImageOptimize\img\testfiles\css3-please.png
    [2] => E:\Server\_ImageOptimize\img\testfiles\css3-tools-10.png
    [3] => E:\Server\_ImageOptimize\img\testfiles\fb.jpg
    [4] => E:\Server\_ImageOptimize\img\testfiles\MysqL.gif
    [5] => E:\Server\_ImageOptimize\img\testfiles\OriginalImages\css3-generator.png
    [6] => E:\Server\_ImageOptimize\img\testfiles\OriginalImages\css3-please.png
    [7] => E:\Server\_ImageOptimize\img\testfiles\OriginalImages\css3-tools-10.png
    [8] => E:\Server\_ImageOptimize\img\testfiles\OriginalImages\fb.jpg
    [9] => E:\Server\_ImageOptimize\img\testfiles\OriginalImages\MysqL.gif
    [10] => E:\Server\_ImageOptimize\img\testfiles\OriginalImages\support-browsers.png
    [11] => E:\Server\_ImageOptimize\img\testfiles\support-browsers.png
)

解决方法@H_403_41@
虽然andreas的答案可能有效,但你也可以让PHP 5的 RecursiveDirectoryIterator为你工作并使用更多的OOP方法.

这是一个简单的例子:

$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));

while ($it->valid())
{
  if ($it->isDot())
    continue;

  $file = $it->current();
  if (self::is_image($file->pathName))
  {
    $files[] = $file->pathName;
  }

  $it->next();
}

编辑:

或者,你可以尝试这个(从Zend_Translate_Adapter复制):

$it = new RecursiveIteratorIterator(
                new RecursiveRegexIterator(
                    new RecursiveDirectoryIterator($dir,RecursiveDirectoryIterator::KEY_AS_PATHNAME),'/^(?!.*(\.svn|\.CVS)).*$/',RecursiveRegexIterator::MATCH
                ),RecursiveIteratorIterator::SELF_FIRST
            );

foreach ($it as $dir => $info)
{
  var_dump($dir); 
}

干杯

克里斯

脚本宝典总结

以上是脚本宝典为你收集整理的在PHP中递归收集图像文件路径全部内容,希望文章能够帮你解决在PHP中递归收集图像文件路径所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。