图像目录的路径也需要包含子文件夹

时间:2014-09-10 03:39:05

标签: php xml simplexml

所以我有这个代码,我用它来允许使用xml数据表对我的所有图像进行实时搜索。我现在遇到的问题是能够看到子文件夹名称被集成到每个图像的文件名中。我的想法是,我将有一个带有图像的文件夹,并在该文件夹中有许多子文件夹,包含更多图像。我不是将所有这些图像从子文件夹中取出,而是希望将相应的子文件夹路径包含在文件名中,以便所有子文件夹中的所有图像都可以包含在搜索中。

这是我目前的代码:

$path_to_image_dir = 'images'; // relative path to your image directory


$xml_string = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<images> 
</images>
XML;

$xml_generator = new SimpleXMLElement($xml_string);

if ( $handle = opendir( $path_to_image_dir ) ) 
{
    while (false !== ($file = readdir($handle))) 
    {
        if ( is_file($path_to_image_dir.'/'.$file) ) 
        {
           list( $width, $height ) = getimagesize($path_to_image_dir.'/'.$file);    
           $image = $xml_generator->addChild('image');  
           $image->addChild('path', $path_to_image_dir.'/'.$file);    
           $image->addChild('height', $height);    
           $image->addChild('width', $width);        
        }
    }
    closedir($handle);
}

$file = fopen('data.xml','w');
fwrite($file, $xml_generator->asXML());
fclose($file);?>

我认为这行代码是答案,但不知道如何或在何处添加它以及是否需要对代码进行任何更改。

foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path_to_image_dir)) as     
$file)

感谢任何帮助。 在此先感谢大家,欢呼!

1 个答案:

答案 0 :(得分:1)

是的,你已经很亲密了。您可以使用该SPL库递归获取文件。例如:

$path_to_image_dir = 'images'; // relative path to your image directory

$xml_string = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<images>
</images>
XML;

$xml_generator = new SimpleXMLElement($xml_string);

$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path_to_image_dir));
foreach($it as $path => $file) {
    // you can use the `$path` key (which contains the path)
    // or another way is $file->getPathname()
    if($file->isDir()) continue; // skip folders
    list( $width, $height ) = getimagesize($path);
    $image = $xml_generator->addChild('image');
    $image->addChild('path', $path);
    $image->addChild('height', $height);
    $image->addChild('width', $width);
}

$file = fopen('data.xml','w');
fwrite($file, $xml_generator->asXML());
fclose($file);