il tuo è un controsenso... cosa te ne fai del solo nome del file o directory in un processo ricorsivo? se hai 2 file chiamati pippo.txt in cartelle diverse, dopo non sei piu in grado di riconoscerli....

cmq eccoti una funzione che utilizzo io

Codice PHP:
<?php
function list_elements($dir,$out
  {
  
$file_list '';
  
$stack[] = $dir;
  while (
$stack
    {
    
$current_dir array_pop($stack);
    if (
$dh opendir($current_dir)) 
      {
      while ((
$file readdir($dh)) !== false
        {
        if (
$file !== '.' AND $file !== '..'
          {
          
$current_file "{$current_dir}/{$file}";
          if (
is_file($current_file)) 
            {
            
$file_list[] = "{$current_dir}/{$file}";
            } 
          elseif (
is_dir($current_file)) 
            {
            
$stack[] = $current_file;
            
$dirs[]=$current_file//l' array delle directory
          //echo $current_file." corrisponde ad una directory
";    // questa
            }
          }
        }
      }
    }
  if (
$out=='file')
    return 
$file_list;
  if (
$out=='dir')
    {
    //
$dirs=array_reverse($dirs);
    return 
$dirs;
    }
  }

$dirs=list_elements("cartella",'dir'); // raccoglie tutte le dir

$files=list_elements("cartella",'file'); // raccoglie tutti i files

echo "
<pre>";
print_r(
$dirs);
print_r(
$files);
?>