Bien, voy a exponerlo comentado, jejeje.
Código PHP:
$num_dirs=0;
$num_archs=0;
while ($archivo = readdir($directorio)) {
if($archivo == '.') {
//Asignamos el directorio al array
$dirs[$num_dirs]= "<a href=\"?dir=.\">$archivo</a><br>";
//Aumentamos el objeto q usamos como índice para el array. En los de abajo es 3/4 de lo mismo.
$num_dirs++;
} elseif($archivo == '..'){
if($dir != '.'){
$carpetas = split("/",$dir);
array_pop($carpetas);
$dir2 = join("/",$carpetas);
$dirs[$num_dirs]="<a href=\"?dir=$dir2\">$archivo</a><br>";
$num_dirs++;
}
}
elseif(is_dir("$dir/$archivo")) {
$dirs[$num_dirs]= "<a href=\"?dir=$dir/$archivo\">$archivo</a><br>";
$num_dirs++;
} else {
$archs[$num_archs]="$archivo<br>";
$num_archs++;
}
}
//Ahora hay q ordenar los arrays:
sort ($dirs);
sort ($archs);
//Recorremos los arrays y mostramos. Empezamos por los directorios
for ($i=0;$i<$num_dirs;$i++) echo $dirs[$i];
//Y ahora los archivos
for ($i=0;$i<$num_archs;$i++) echo $archs[$i];
Espero q esto te sirva como orientación... No estoy seguro q esté del todo correcto. Espero no haberme comido ningún símbolo.
Saludos.