Foros del Web » Programando para Internet » PHP »

Listar subdirectorios

Estas en el tema de Listar subdirectorios en el foro de PHP en Foros del Web. Hola a todos! Necesito listar sólo el nombre de los subdirectorios de "documentos", donde tengo archivos php, txt y jpg. Si utilizo el siguiente script: ...
  #1 (permalink)  
Antiguo 27/06/2011, 12:50
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 14 años, 10 meses
Puntos: 1
Listar subdirectorios

Hola a todos!

Necesito listar sólo el nombre de los subdirectorios de "documentos", donde tengo archivos php, txt y jpg.
Si utilizo el siguiente script:
Código PHP:
$carpeta=opendir("documentos");
$lista '';
while (
$file readdir($carpeta)) 
{
    if (!
is_file($file) && $file !='.' && $file !='..')
    {        
        
$lista .= '<li>'.$file.'</li>';
    }
}
echo 
$lista
Me lista todos los directorios, pero tambien los archivos *.txt, *.jpg pero no los *.php

Si reemplazo el IF por:
Código PHP:
if (is_file($file) && $file !='.' && $file !='..'
Sólo me lista los *.php

Si uso:
Código PHP:
if (is_dir($file) && $file !='.' && $file !='..'
no me muestra nada.

Y si la reemplazo por:
Código PHP:
if (!is_dir($file) && $file !='.' && $file !='..'
me muestra todo el contenido, incluidos los *.php.

Alguien me puede decir donde está el error? Repito, sólo necesito los nombres de las carpetas o subdirectorios del directorio "documentos".

Entiendo que is_dir($file) me devuelve TRUE si es un directorio existente, por lo que me deberia funcionar con la 3era opción.

El resultado es el mismo en mi servidor local windows(wamp server - Apache : 2.2.17 , PHP : 5.3.5 ) y en mi servidor Linux PHP 5.2.13.

Muchas gracias!
__________________
:adios:
  #2 (permalink)  
Antiguo 27/06/2011, 12:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 8 meses
Puntos: 2534
Respuesta: Listar subdirectorios

Cita:
Iniciado por miglos Ver Mensaje
[...] Entiendo que is_dir($file) me devuelve TRUE si es un directorio existente, por lo que me deberia funcionar con la 3era opción. [...]
Bueno, si niegas el resultado de is_dir() obvio todo sale al revés.

Código PHP:
// MAL
if (!is_dir($file) && $file !='.' && $file !='..')

// BIEN
if (is_dir($file) && $file !='.' && $file !='..'
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 27/06/2011, 15:39
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Listar subdirectorios

Así es Paketetrueke, pero no me muestra lo que yo deseo.

El tema está en la ubicación del archivo desde el que se ejecuta el script. Si quiero leer el directorio "documentos", el script php que ejecuta el listado, debe estar dentro de dicha carpeta. He intentado poner la función en la carpeta documentos y llamarla desde fuera pero tampoco funciona.

Lo que quiero es poner un <select> y que el usuario elija la carpeta que desee ver, si tengo mis archivos en htdocs y quiero hacer un listado de los subdirectorios de "personal" o "clientes", que tiene esta estructura:

htdocs
---images
---js
---css
---docs
---|---clientes
---|---personal

Alguien me pueda dar alguna idea, usando alguna de las funciones de php?
__________________
:adios:
  #4 (permalink)  
Antiguo 27/06/2011, 16:44
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 8 meses
Puntos: 2534
Respuesta: Listar subdirectorios

Aquí el detalle es solamente la ruta que intentas leer, y desde donde la intentas leer.

Cuando especificas "directorio" siempre se entenderá como una ruta relativa al script actual, si colocas "/directorio" la tomará como ruta absoluta.

Debes aprender a trabajar con rutas para conseguir lo que deseas, el uso de $_SERVER['DOCUMENT_ROOT'] es clave si no se sabe con exactitud la raíz del sitio web.

Así solo restaría que concatenes las sub carpetas para que finalmente obtengas una ruta absoluta, la cual funcionará sin importar donde se ejecute el script.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 28/06/2011, 05:18
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Listar subdirectorios

Lo he hecho con $_SERVER['DOCUMENT_ROOT'] y concateno con la carpeta que deseo listar, pero sigue sin aparecer.

Si no te importa, podrías verificarlo en tu servidor local? Y avisarme si funciona o copiarme el código válido.

Nuevamente, muchas gracias!
__________________
:adios:
  #6 (permalink)  
Antiguo 28/06/2011, 05:58
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 8 meses
Puntos: 2534
Respuesta: Listar subdirectorios

A mi me funciona perfectamente, recuerdo haber escrito un aporte que habla de algo parecido.

Te invito a buscar en la sección de aportes al respecto.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 28/06/2011, 06:11
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Listar subdirectorios

pues a buscar se ha dicho!
__________________
:adios:
  #8 (permalink)  
Antiguo 28/06/2011, 15:03
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Listar subdirectorios

Finalmente, así es como queda el script con el resultado que espero, como me dijo pateketrueke, era el tema de la concatenación para obtener la ruta al directorio.
Código PHP:
$ruta='documentos/';
$lista '';
if (
$carpeta=opendir($ruta))
{
    while ((
$file readdir($carpeta)) !== false)
    {
        if (
is_dir($ruta.$file) && $file != '.' && $file != '..')
        {        
            
$lista .= '<li>'.$file.'</li>';
        }
    }
}
echo 
$lista
Sólo 1 consulta, para el caso del while, tambien funciona de esta manera:
Código PHP:
while ($file readdir($carpeta)) 
Me pueden decir si esto afecta de alguna manera a la validación?
__________________
:adios:
  #9 (permalink)  
Antiguo 28/06/2011, 15:51
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 8 meses
Puntos: 2534
Respuesta: Listar subdirectorios

En el sentido mas estricto, si, falla.

Digamos que algún nombre de archivo es 0, así entonces PHP lo evalúa como FALSE, lo cual no es verdad y por ende finaliza el recorrido del bucle.

Por eso la comparación debe ser estricta para evitar este tipo de issue, aunque realmente es poco probable que suceda si comprendes lo que te mencioné.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: is_file, leer-carpetas, subdirectorios
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 17:06.