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