gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-10-31 23:09:06 25 4
gpt4 key购买 nike

我正在开发一个相当大的 PHP 类,该类通过命令行执行大量图像优化,您基本上向程序传递一个 Image pathFolder path里面有多个图像。然后,它通过最多 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");
}

更新

@Chris 的回答让我查看了文档,我发现了一个我修改过的示例,它似乎有效

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
)

最佳答案

虽然安德烈亚斯的回答可能有效,但您也可以让 PHP 5 的 RecursiveDirectoryIterator为您完成这项工作并使用更面向对象的方法。

这是一个简单的例子:

$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 中递归地收集图像文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8799774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com