Per andare ricosivamente prova questa funzione:

Codice PHP:
function dir_walk($callback$dir$types null$recursive false$baseDir '') {
    if (
$dh opendir($dir)) {
        while ((
$file readdir($dh)) !== false) {
            if (
$file === '.' || $file === '..') {
                continue;
            }
            if (
is_file($dir $file)) {
                if (
is_array($types)) {
                    if (!
in_array(strtolower(pathinfo($dir $filePATHINFO_EXTENSION)), $typestrue)) {
                        continue;
                    }
                }
                
$callback($baseDir $file);
            }elseif(
$recursive && is_dir($dir $file)) {
                
dir_walk($callback$dir $file DIRECTORY_SEPARATOR$types$recursive$baseDir $file DIRECTORY_SEPARATOR);
            }
        }
        
closedir($dh);
    }

trovata nella pagina di documentazione di scandir

ciao!