ciao, visto che oggi mi serviva una cosa simile sono partito dal codice che abbiamo scritto ieri, e che come ti avevo detto non avevo testato. 
Era pieno di errori anche di sintassi, comunque questo l'ho testato e sembra funzionare:
	codice:
	<?php
$filter = "jpg";
// directory dove cercare
$directory = "D:/Archivio Foto/";
function readDirRecursive($directory, $filter = '', $debug = 0) {
  if($directory{strlen($directory)-1} !== '/' && $directory{strlen($directory)-1} !== '\\') {
    $directory .= '/';
  }
  if($debug) {
    echo "funzione richiamata con i paremtri:
";
    echo "directory:".$directory."
";
    echo "filter:".$filter."
";
  }
  $items = array();
  $d = dir($directory);
  if ($d) {
    while($entry=$d->read()) {
      $path_assoluto = $directory.$entry;
      if(is_dir($path_assoluto) && $entry != "." && $entry != '..') {
        if($debug) {
          echo "l'entry :".$path_assoluto." è una directory, richiamo nuovamente readDirRecursive con i parametri (".$entry.",".$filter.");
";
        }
        $items = array_merge($items, readDirRecursive($path_assoluto, $filter, $debug));
      } else {
        $add = true;
        if($filter) {
          $ext = array_pop(explode('.', $path_assoluto));
          if(strpos(strtolower($path_assoluto), $filter) === false) {
            $add = false;
          }
        }
        if($add) {
          $items[] = $path_assoluto;
        } elseif($debug) {
          echo "l'entry :".$entry." non soddisfa il filtro
";
        }
      }
    }
    $d->close();
    sort($items);
    return $items;
  } elseif($debug) {
    echo "Non riesco a leggere la directory : ".$directory."
";
  }
}
$items = readDirRecursive($directory, $filter, 0);
echo "<pre>";
print_r($items);
echo "</pre>";
?>
 
Se vuoi vedere il debug passa come 3 argomento 1.
Il filtro viene effettuato sulle estensioni, e non su tutto il file.
Ciao