Ok... el problema es que is_dir($file) va a verificar si $file es un directorio, pero desde el contexto de ejecución del script. Lo que tienes que hacer es buscar dentro de $dir.
Del mismo modo, como ya te había comentado antes, la variable "dir" que pasas por url, debe incluir el path completo.
Código PHP:
if(isset($_GET['dir'])){
$dir = $_GET['dir']."/";
}else{
$dir = "./";
}
if ($handle = opendir($dir)) {
while ($file = readdir($handle)) {
if ($file != "." && $file != "..") {
$extensio = substr($file,strpos($file,".")+1);
// Verifica el path completo
if (is_dir($dir.$file)){
// Recuerda, además, pasar como "dir" el path completo a ese dir.
echo "<img src='images/folder.gif' width=20><a href='$_SERVER[PHP_SELF]?dir=$dir$file'>$file</a><br>";
}else{
switch ($extensio){
case "gif":
echo " <img src='images/img2.gif' width=20> $file <br>" ;
break;
case "png":
echo "<img src='images/img2.gif' width=20> $file <br>";
break;
case "jpg":
echo "<img src='images/img.gif' width=20> $file <br>";
break;
case "php":
break;
case "txt":
echo "<img src='images/text.gif' width=20> $file <br>";
break;
case "html":
echo "<img src='images/web.gif' width=20> $file <br>";
break;
case "htm":
echo "<img src='images/web.gif' width=20> $file <br>";
break;
case "css":
echo "<img src='images/text.gif' width=20> $file <br>";
break;
default:
// Aquí te recomiendo no poner la imagen de "folder" porque puede prestarse a confusiones.
// deberías tener otra imagen para el archivo genérico (o no reconocido)
echo "<img src='images/folder.gif' width=20> $file <br>";
break;
}
}
}
}
closedir($handle);
}
Saludos