para no romperse el "coco", una solución simple, aunque ten en cuenta que hará búsquedas multi-dimensionales y no es una buena practica el "overcall"
Código PHP:
function get_music_arr($directory, $filter = '.mp3')
{
$items = array();
if($d = dir($directory))
{
while($entry = $d->read())
{
$ps = strpos(strtolower($entry), $filter);
if($ps !== false)
{
$items[] = $entry;
}
if(is_dir($directory.'/'.$entry))
{
$items[$entry] = get_music_arr($directory.'/'.$entry);
}
}
}
$d->close();
sort($items);
return $items;
}
$items = get_music_arr($_GET['music']);
con eso obtendrás un array con varios niveles de profundidad, suponiendo que tu script no soporta carpetas en xml
Código PHP:
$anotation = 0;
function print_data($data, $path)
{
global $anotation;
foreach($data as $key => $value)
{
if(is_array($value))
{
print_data($value, $path.'/'.$key);
}
else
{
$anotation++;
echo " <track>\n";
echo " <annotation>".$anotation.". ".end(explode(".mp3", $value,-1))."</annotation>\n";
echo " <location>".$path.'/'.$value."</location>\n";
echo " <info></info>\n";
echo " </track>\n";
}
}
}
}
header("content-type:text/xml;charset=utf-8");
echo "<?xml version='1.0' encoding='UTF-8' ?>\n";
echo "<playlist version='1' xmlns='http://xspf.org/ns/0/'>\n";
echo " <title>Sample PHP Generated Playlist</title>\n";
echo " <info>http://www.jeroenwijering.com/</info>\n";
echo " <trackList>\n";
print_data($items, $_GET['music'])
// .. and last we add the closing tags
echo " </trackList>\n";
echo "</playlist>\n";
nota: El código no lo revise, aunque debería funcionar