Club Delphi  
    FTP   CCD     Enlaces   Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Desplegado
  #1  
Antiguo 09-04-2008
Avatar de gabrielflowers
gabrielflowers gabrielflowers is offline
Miembro
 
Registrado: jul 2007
Posts: 87
gabrielflowers Va por buen camino
listar carpetas de un directorio?

hola a todos, me encuentro haciendo un sistema, y quisiera hacer un listado de las carpetas (solo las carpetas, no archivos) que hay en un directorio, por ejemplo quiero listar que carpetas hay en el directorio "/temas" de mi proyecto, por si acaso solo quiero un listado, o mejor aun, quisiera cargar ese listado de nombres de carpetas en un array; no me sugieran la opcion de implementar un
[HTML]<input type="file" name="temas">...[/HTML]
por que no es lo que quiero, el asunto no va por ahi, gracias de antemano
__________________
"valor a pesar de toda debilidad del cuerpo, el espiritu debe triunfar"
Responder Con Cita
  #2  
Antiguo 09-04-2008
keyboy keyboy is offline
Usuario de ocasión
 
Registrado: oct 2004
Posts: 367
keyboy Va por buen camino
Basándonos en el ejemplo que viene en el manual de PHP:

Código PHP:
<pre>
<?php
$dir 
'.';

$dh opendir($dir);
while ((
$file readdir($dh)) !== false)
{
    if (
is_dir($dir$file) && $file != '.' && $file != '..')
    {
        echo 
$file "\n";
    }
}
?>
</pre>
Bye

Última edición por keyboy fecha: 09-04-2008 a las 17:56:40. Razón: Tenía una falencia: $file en lugar de $dir . $file
Responder Con Cita
  #3  
Antiguo 09-04-2008
Avatar de gabrielflowers
gabrielflowers gabrielflowers is offline
Miembro
 
Registrado: jul 2007
Posts: 87
gabrielflowers Va por buen camino
gracias por sus aportes, en base a ello consegui una solucion probada:
Código PHP:
if($gestor=opendir('../temas'))
 {
     while ((
$archivo=readdir($gestor))!==false)
     {
      if ((!
is_file($archivo))and($archivo!='.')and($archivo!='..'))
          
$array_temas[$archivo]=$archivo;
     }
     
closedir($gestor);
 } 
y digo que es una solucion probada, porque los ejemplos que me ponen y los de php, tienen algunas falencias, como que me listan tambien "." (mi actual directorio, supongo) y "..", espero este ejemplo sirva de referencia para otros, gracias, saludos.
__________________
"valor a pesar de toda debilidad del cuerpo, el espiritu debe triunfar"

Última edición por gabrielflowers fecha: 09-04-2008 a las 21:44:39.
Responder Con Cita
  #4  
Antiguo 09-04-2008
keyboy keyboy is offline
Usuario de ocasión
 
Registrado: oct 2004
Posts: 367
keyboy Va por buen camino
Cita:
Empezado por gabrielflowers Ver Mensaje
los ejemplos que me ponen y los de php, tienen algunas falencias, como que me listan tambien "." (mi actual directorio, supongo) y ".."
Vaya. Pues te aseguro que entre las falencias del ejemplo que te puse no está la de listar esos directorios.

Bye
Responder Con Cita
  #5  
Antiguo 09-04-2008
Avatar de gabrielflowers
gabrielflowers gabrielflowers is offline
Miembro
 
Registrado: jul 2007
Posts: 87
gabrielflowers Va por buen camino
para keyboy, oye no te molestes, pero sin dudas que probe tu codigo, y de hecho no me lista ni una sola carpeta del directorio en cuestion, y esa es su falencia justamente, pero gracias de todos modos, pues tu ejemplo me sirvio de base para hacer lo que buscaba, pues pude filtrar "." y ".." que se me listaban, gracias...

pdta: segun veo la funcion is_dir($archivo) solo toma en cuenta "." y ".."; asi que decidi usar mejor !is_file($archivo), osea filtrar aquellos que no son archivos en si (que vendrian a ser las carpetas)
__________________
"valor a pesar de toda debilidad del cuerpo, el espiritu debe triunfar"

Última edición por gabrielflowers fecha: 09-04-2008 a las 17:43:47.
Responder Con Cita
  #6  
Antiguo 09-04-2008
Avatar de Julián
Julián Julián is offline
Merodeador
 
Registrado: may 2003
Ubicación: en mi casa
Posts: 1.780
Julián Va por buen camino
Hola!

El código de keyboy es correctisimo.
Si se le califica como erroneo lo educado sería acompañar una explicación.

Un saludo!
__________________
"la única iglesia que ilumina es la que arde"
Anonimo
Responder Con Cita
  #7  
Antiguo 09-04-2008
Avatar de gabrielflowers
gabrielflowers gabrielflowers is offline
Miembro
 
Registrado: jul 2007
Posts: 87
gabrielflowers Va por buen camino
oye julian, revisando bien el codigo de keyboy concluyo de que evidentemente si funciona, pero analizandolo mejor, el codigo que puse al final es mas seguro, y mas optimo quizas que el de keyboy, de todos modos, gracias
__________________
"valor a pesar de toda debilidad del cuerpo, el espiritu debe triunfar"

Última edición por gabrielflowers fecha: 09-04-2008 a las 23:55:20.
Responder Con Cita
  #8  
Antiguo 10-04-2008
dec dec is offline
Moderador
 
Registrado: dic 2004
Posts: 11.688
dec Va por buen camino
Hola,

Cita:
Empezado por Gabriel
para keyboy, oye no te molestes, pero sin dudas que probe tu codigo, y de hecho no me lista ni una sola carpeta del directorio en cuestion, y esa es su falencia justamente (...)
Pues debe ser por que, si te fijas, en el código se unen directorio y subdirectorio, de modo que para que funcione el "script" como se espera habrá de entregarse la ruta de un directorio tal que así:

Código:
/directorio/
Y no así:

Código:
/directorio
Es decir, incluyendo el separador de directorios al final, puesto que de otro modo luego buscaríamos directorios tal que:

Código:
/directoriossubdirectorio
Cuando en realidad lo que estamos buscando es:

Código:
/directorios/subdirectorio
Por lo demás, el "script" de Keyboy funciona como se espera, y no tiene en cuenta los directorios "." y "..".
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #9  
Antiguo 10-04-2008
Avatar de gabrielflowers
gabrielflowers gabrielflowers is offline
Miembro
 
Registrado: jul 2007
Posts: 87
gabrielflowers Va por buen camino
dec, evidemente fue por ahi mi tropiezo que tuve al principio al probar el codigo de keyboy, asi que averigue un poco mas y fue asi como di con la solucion que plantee, que por cierto me parece mejor que la de keyboy, gracias.
__________________
"valor a pesar de toda debilidad del cuerpo, el espiritu debe triunfar"
Responder Con Cita
  #10  
Antiguo 10-04-2008
dec dec is offline
Moderador
 
Registrado: dic 2004
Posts: 11.688
dec Va por buen camino
Hola,

¿Pero por qué te parece mejor tu solución que la de Keyboy? Explícalo. Yo lo único que sé es que Keyboy utiliza la función "is_dir" y tú la función "is_file". Pero, considero la función "is_dir" más apropiada. ¿Por qué? Porque lo que queremos es buscar directorios, no "algo que no sea un archivo".

Por ejemplo, no sé si estoy equivocado, pero, podría darse el caso de que tu "script" listara otras cosas que no sean archivos, pero, tampoco directorios, como los "enlaces" de GNU/Linux. Mientras que la función "is_dir" busca directorios, que es lo que necesitas.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #11  
Antiguo 10-04-2008
Avatar de gabrielflowers
gabrielflowers gabrielflowers is offline
Miembro
 
Registrado: jul 2007
Posts: 87
gabrielflowers Va por buen camino
dec, gracias por tu aclaracion, lo tomare en cuenta, de hecho no habia pensado en esa posibilidad que mencionas en linux, de verdad lo tomare muy en cuenta; bueno en realidad creo que mi solucion es mejor por que uso una variable menos ($dir), si revisas ambos codigos te daras cuenta, ademas de que controlo que esa variable evidentemente sea un directorio...

pero de verdad gracias por tu comentario, lo tomare muy en cuenta
__________________
"valor a pesar de toda debilidad del cuerpo, el espiritu debe triunfar"
Responder Con Cita
  #12  
Antiguo 10-04-2008
dec dec is offline
Moderador
 
Registrado: dic 2004
Posts: 11.688
dec Va por buen camino
Hola,

Ahora que lo dices, creo que en tu "script", el usar esa variable de menos, en realidad es una desventaja, cuando no un problema. Verás. Keyboy usa la variable "$dir", no sólo para dar más soltura al "script", puesto que puedes especificar la ruta del directorio a listar en dicha variable, y no, directamente, donde se supone que ha de usarse.

Pero eso no es todo. Si te fijas, Keyboy usa la variable "$dir" para unirla al subdirectorio que se encuentra en el directorio de marras, de modo que, por decirlo así, usa una ruta absoluta para comprobar la existencia del subdirectorio. Si no me equivoco, tú podrías tener problemas al no hacerlo así, puesto que te basas en el "directorio activo", pero, este podría llegar a cambiar en un momento dado.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #13  
Antiguo 10-04-2008
Avatar de gabrielflowers
gabrielflowers gabrielflowers is offline
Miembro
 
Registrado: jul 2007
Posts: 87
gabrielflowers Va por buen camino
dec, claro que poner el nombre del directorio ($dir) en una variable, podria ser mas util, pero en mi caso mi directorio no es tan "activo" que digamos, es mas bien estatico, por lo que usar una variable mas me resulta una linea (innecesaria) de codigo mas...

bueno, para todos pongo aca el codigo final que me parece es la solucion definitiva a "como listar carpetas de un directorio (temas/)":
Código PHP:
if($gestor=opendir('../temas'))
 {
     while((
$archivo=readdir($gestor))!==false)
     {
      if((
is_dir('../temas/'.$archivo))and($archivo!='.')and($archivo!='..'))
          
$temas[$archivo]=$archivo;
     }
     
closedir($gestor);
 } 
gracias a todos por sus aportes, saludos, espero este tema sirva de ayuda a muchos, bye.
__________________
"valor a pesar de toda debilidad del cuerpo, el espiritu debe triunfar"
Responder Con Cita
  #14  
Antiguo 10-04-2008
keyboy keyboy is offline
Usuario de ocasión
 
Registrado: oct 2004
Posts: 367
keyboy Va por buen camino
El código que originalmente puse tenía ciertamente la carencia de concatenar el nombre de directorio. No me había percatado porque lo probé con ".", caso en el que evidentemente no es necesario. Al agregar el nombre de directorio pude ver bien el listado. Como indica dec, y no sólo en linux, si se usa !is_file() en lugar de is_dir() pues se obtiene, por ejemplo, los lnk correspondientes a accesos directos.

Lo que realmente me sorprende es que funcione en "../temas" sin pegar el nombre de directorio. Pero si le funciona, pues qué mejor.

Bye
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Listar archivos en un directorio vivamotos C++ Builder 1 04-01-2008 11:56:08
Obtener carpetas de un directorio angelp4492 Varios 6 27-12-2007 18:30:40
Es posible compartir carpetas por Internet utilizando compartir carpetas? JuanErasmo Windows 5 12-02-2007 20:45:17
Listar archivos de directorio a travez de FTP ilichhernandez Internet 6 22-09-2006 01:03:14
saber el numero de archivos o carpetas de un directorio ilcapo C++ Builder 3 07-02-2006 18:25:46


La franja horaria es GMT +2. Ahora son las 14:49:10.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi