è molto rudimentale (non stampa nemmeno le immagini ma solo l'array corrispondente) ma stai un attimo a risistemartelo e impaginartelo come vuoi:

Codice PHP:
<?php
function dir_reader($dir, &$images, &$subdirs
{
    global 
$defdir;
    if(
$dir != $defdir)
    {
        
$dir $defdir."/".$dir;
    }
    
    if (
$handle opendir($dir)) 
    {        
        while (
false !== ($file readdir($handle))) 
        {
            if (
$file != "." && $file != ".."
            {
                list(
$filename$ext) = explode("."$file);
                
                if(!
is_dir($dir.'/'.$file)) 
                {
                    if(
$ext == "jpg" || $ext == "gif")
                    {
                        
$images[] = $dir."/".$file;
                    }
                }
                else
                {
                    
$subdirs[] = "[url='?sd=".$file."']".$file."[/url]";
                }
            }
        }
    
closedir($handle);
    }
}

// metti qui il nome della tua cartella MADRE delle immagini (quella da cui parti per la gallery)
$defdir './testImg';

if(!isset(
$_GET['sd']))
{
    
$dir $defdir;
}
else
{
    
$dir $_GET['sd'];
}

$images = array();
$subdirs = array();
dir_reader($dir, &$images, &$subdirs);
?>
<table border="1">
    <tr>
        <td>
        <?php
                        
// al posto di sta roba metti un cliclo sull'array $subdirs di modo da ottenere un menu formattato decentemente
            
print("<pre>");
            
print_r($subdirs);
            print(
"</pre>");
            if(isset(
$_GET['sd']))
            {
                print(
"[url='".$_SERVER[']indietro[/url]");
            }
        ?>
        </td>
        <td>
        <?php
                        // e qui esegui un ciclo sull'
array $images di modo da ottenere una gallery di immagini e non un listing di array
            print(
"<pre>");
            
print_r($images);
            print(
"</pre>");
        
?>
        </td>
    </tr>
</table>