我正在开发一个相当大的 PHP 类,它通过命令行执行图像优化的很多操作,您基本上可以通过该程序Image path
or a Folder 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");
}
UPDATE
@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
)