Foros del Web » Programando para Internet » PHP »

Listar archivos del servidor Web.

Estas en el tema de Listar archivos del servidor Web. en el foro de PHP en Foros del Web. Teniendo en cuenta el codigo siguiente: (podeis obviarlo la pregunta está más abajo) $dir = $HTTP_GET_VARS['dir']; if ($handle = opendir($dir)) { while (false !== ($file ...
  #1 (permalink)  
Antiguo 11/07/2005, 10:28
 
Fecha de Ingreso: mayo-2005
Mensajes: 15
Antigüedad: 12 años, 7 meses
Puntos: 0
Exclamación Listar archivos del servidor Web: Nadie contesta?

Teniendo en cuenta el codigo siguiente: (podeis obviarlo la pregunta está más abajo)

$dir = $HTTP_GET_VARS['dir'];
if ($handle = opendir($dir)) {

while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
//Miro la extensió de l'arxiu per sapiguer perqué no me la detecta.
$extensio = substr($file,strpos($file,".")+1);

if (is_dir($file)==true){
//echo "isdir<br>";
echo "<img src='images/folder.gif' width=20><a href='$_SERVER[PHP_SELF]?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:
echo "<img src='images/folder.gif' width=20> $file <br>";
break;
}

}


}

}
closedir($handle);
}


Cuando recargo la página con el código siguient:
if (is_dir($file)==true){
//echo "isdir<br>";
echo "<img src='images/folder.gif' width=20><a href='$_SERVER[PHP_SELF]?dir=$file'>$file</a><br>" ;}



Los hipervinculos funcionan bien, pero después de esta segunda carga se me pasa por alto el codigo anterior (verde). Y no tengo ni idea de porque no reconoce los directorios como directorios, si en un principio me lo hace bien.

La idea es que desde un archivo php pueda listar todo el directorio e ir entrando de carpeta en carpeta.

Muchas Gràcias.

Última edición por chremon_sbd; 13/07/2005 a las 09:30
  #2 (permalink)  
Antiguo 13/07/2005, 04:46
 
Fecha de Ingreso: mayo-2005
Mensajes: 15
Antigüedad: 12 años, 7 meses
Puntos: 0
Nadie contesta?
  #3 (permalink)  
Antiguo 13/07/2005, 04:54
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Hola:

Lo que pasa es que la primera vez estás leyendo el directorio $dir = "dir1".
Los directorios que encuentres dentro de "dir1" deben ser llamados por la ruta "$dir/$file".
Código PHP:
 echo "<img src='images/folder.gif' width=20><a href='$_SERVER[PHP_SELF]?dir=$dir/$file'>$file</a><br>"
Saludos
  #4 (permalink)  
Antiguo 13/07/2005, 04:59
cartucho
Invitado
 
Mensajes: n/a
Puntos:
ten en cuenta que al pasar la variable por la URL, las tendrás que recoger así:

$_GET["dir"]

El código en verde:

if (is_dir($file)==true){
//echo "isdir<br>";
echo "<img src='images/folder.gif' width=20><a href='$_SERVER[PHP_SELF]?dir=$file'>$file</a><br>" ;}

no te lo detecta porque la variable $file la pierdes (si tienes register_globals=off ).Tendrias que pasarla tambien por la URL

saludos
  #5 (permalink)  
Antiguo 13/07/2005, 09:33
 
Fecha de Ingreso: mayo-2005
Mensajes: 15
Antigüedad: 12 años, 7 meses
Puntos: 0
Hola,
Primero de todo muchas grácias.

Segundo, creo que no habeis visto bien el problema (basicamente no me he explicado bien) Lo que quiero, y no consigo (ni si quiera con ninguno de los cambios anteriores) es que se pueda navegar dentro de las carpetas.
Pues bien, en la página inicial, osea sin pasar variables, si que funciona. Pero a la que entro en el segundo nivel de directorio la cosa no furrula.
Basicamente creo que no detecta los archivos como directorios y les pone el icono por defecto (que es una carpetita)
Y la variable $file no se pierde, porque les cambia el icono, y no me interesa pasarla porque la pagina debe listar cada vez los archivos y directorios de dentro de la nueva carpeta de destino $dir.
Os dejo el ejemplo colgado para que veais que es lo que pasa.
http://www.chremon.org/list/list2.php
Muchas grácias de nuevo.

Última edición por chremon_sbd; 13/07/2005 a las 09:41
  #6 (permalink)  
Antiguo 13/07/2005, 15:04
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
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
  #7 (permalink)  
Antiguo 14/07/2005, 02:25
 
Fecha de Ingreso: mayo-2005
Mensajes: 15
Antigüedad: 12 años, 7 meses
Puntos: 0
Ok!!!! Muchas Grácias!!!!
Te debo una jpinedo.
chremon[arroba]hotmail.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:28.