Guarda, dato che mi sono intrippato con questa cosa ti ho fatto anche l'impaginazione e il download =)

Leggi file/cartelle:
Codice PHP:
<?
//funzione per aprire un cartella verra chiamata solo se la cartella esiste
function open_dir($nome_dir){

    
//apro la cartella
    
if (!$open_dir opendir($nome_dir)){
        echo 
"Cartella non trovata, controlla il percorso del file!";
    }
    else{
        
$percorso="$nome_dir"
        
$size_dir=filesize($percorso)/1000
        
$size_dir=round($size_dir,1); 
        
$size_dir=" ( ".$size_dir." Kb )";

        echo 
"Cartella: [b]$nome_dir - $size_dir[/b] 

"
;

        
//inizio la tabella dei file e cartelle
        
echo "<table border=\"1\" cellpadding=\"5px\">
                    <tr>
                        <td>[b]TIPO[/b]</td>
                        <td>[b]NOME[/b]</td>
                        <td>[b]SIZE[/b]</td>
                        <td>[b]DOWNLOAD[/b]</td>
                        <td>[b]OPEN[/b]</td>
                    </tr>

        "
;
        while (
$read=readdir($open_dir)){



            if(
$read != "." && $read != "..") {
                
                    

                
//se è un file
                
if (strstr($read".")){
                    
//prendo la dimensione del file/directory
                    
$percorso_="$nome_dir/$read";
                    
$size_file=filesize($percorso_)/1000;
                    
                   echo 
"
                        <tr>
                            <td>File</td>
                            <td>
$read</td>
                            <td>(
$size_file) Kb</td>
                            <td><form action=\"download.php\" method=\"post\"><input type=\"submit\" value=\"download\" /><input type=\"hidden\" value=\"
$read\" name=\"nome\" /><input type=\"hidden\" value=\"$size_file\" name=\"size\" /></form></td>
                            <td> - </td>
                        </tr>

                    "
;




                }
//se è una cartella
                
else{
                    echo 
"
                        <tr>
                            <td>Directory</td>
                            <td>
$read</td>
                            <td> - </td>
                            <td> - </td>
                            <td><a href=\"?dir=
$nome_dir/$read\">apri</a></td>
                        </tr>

                    "
;

                }
                    
                
            }
        }
        echo 
"</table>";
    }
}
//funzione per andare indietro
function ind($dir){
    
$array explode("/",$dir);
    
        
$dir array_pop($array);
        
$dir implode("/",$array);
        
header("location: ?dir=$dir");
    
}

//se ha inserito qualche directori da caricare ma non è andato indietro mostro il pulsanti
//e mostro la cartella
if (!empty($_GET['dir']) && empty($_GET['ind'])){

    
$dir $_GET['dir'];

    echo 
"
        <input type=\"submit\" value=\"<\" onClick=\"location.href='?ind=ok&dir=
$dir';\" />


    "
;

    
open_dir($_GET['dir']);

}
//se è piena la directori e ha schiacciato sul p0ulsante indietro
//prendo le variabili e faccio partire la funziona indietro
else if (!empty($_GET['dir']) && $_GET['ind'] == 'ok'){
    
$dir $_GET['dir'];

    
ind($dir);

}
else{
        echo 
"<script>alert(\"Errore di indirizzamento!\"); history.go(-1);</script>";
   
}


?>
download.php
Codice PHP:

<?
$nome_file
=$_POST['nome'];
$size_file=$_POST['size'];

if (empty(
$nome_file) || empty($size_file)){
    echo 
"<script>alert(\"Errore nel download!\"); history.go(-1);</script>";
}
else{

    
header("Content-type: Application/octet-stream");
    
header("Content-Disposition: attachment; filename=$nome_file");
    
header("Content-Description: Download PHP");
    
header("Content-Length: $size_file");
    
readfile($nome_file);

}


?>
Se vuoi vederlo funzionante vai qui:
http://wordsbank.altervista.org/prov...?dir=lib/touch

Fai qualche prova a levare la dir o a andare troppo indietro con le pagina =)