Devi scrivere una funzione ricorsiva, l'ho scritta al volo, potrebbe non funzionare, ma almeno ti da un punto di partenza:

codice:
$filter = ".jpg";
// directory dove cercare
$directory = "public/photo"; 

function readDirRecursive($directory, $filter) {
@$d = dir($directory);
  if ($d) {
  while($entry=$d->read()) {
    $ps = strpos(strtolower($entry), $filter);
    if ($ps !== false) {
       $items[] = $entry;
    } elseif(is_dir($entry) && $entry != "." && $entry != '..')) {

       $items = array_merge($items, readDirRecursive($entry, $filter));

    }
  }

  $d->close();
  
  sort($items);
  return $items;
} 

$items = readDirRecursive($directory, $filter);

echo "ecco la lista delle foto contenute nella cartella";

//
for($i=0; $i<sizeof($items); $i++) {
echo " nome della foto".$items[$i]."
";
}

[/code]