Foros del Web » Programando para Internet » PHP »

mostrar arbol de archivos y carpetas

Estas en el tema de mostrar arbol de archivos y carpetas en el foro de PHP en Foros del Web. hola a todos, quisiera mostrar todas las carpetas y sus archivos que esten contenidas en un directorio raíz. $dir = $directorio; while (false !== ($file ...
  #1 (permalink)  
Antiguo 12/04/2011, 13:27
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
mostrar arbol de archivos y carpetas

hola a todos, quisiera mostrar todas las carpetas y sus archivos que esten contenidas en un directorio raíz.

$dir = $directorio;
while (false !== ($file = readdir($dir)))
{
if(($file!='.')&&($file!='..'))
{
echo $file;
}
}
closedir($dir);
este código no me muestra el árbol completo, solo muestra los que están al mismo nivel, alguna ayuda ????
  #2 (permalink)  
Antiguo 12/04/2011, 13:29
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: mostrar arbol de archivos y carpetas

recursividad
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 12/04/2011, 13:33
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: mostrar arbol de archivos y carpetas

si , pero no encuentro el caso base, me ayudas por favor ?
  #4 (permalink)  
Antiguo 12/04/2011, 13:38
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: mostrar arbol de archivos y carpetas

la idea es usar la funcion una ves mas por cada carpeta que halles, así es como funciona esto...
Código PHP:
function listar($directorio)
{
  
$out = array();
  
$dir opendir($directorio);
  while (
false !== ($file readdir($dir)))
  {
    if((
$file!='.')&&($file!='..'))
    {
       if (
is_file($directorio.'/'.$file)) $out []= $file;
       elseif (
is_dir($directorio.'/'.$file))
      {
        foreach (
listar($directorio.'/'.$file) as $one$out []= $file.'/'.$one;
      }
    }
  }
  
closedir($dir);
  return 
$out;

no he revisado si funciona, pero ya lo sabrás...

Edito: correción...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Última edición por pateketrueke; 12/04/2011 a las 13:45
  #5 (permalink)  
Antiguo 12/04/2011, 13:44
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: mostrar arbol de archivos y carpetas

entra en un ciclo infinito !!!, gracias de todas formas
function listar_directorios_ruta($ruta){

if (is_dir($ruta)) {
if ($dh = opendir($ruta)) {
while (($file = readdir($dh)) !== false) {

if ((!is_file($file))and($file!='.')and($file!='..'))
echo "<br>Nombre de archivo: $file : Es un: " . filetype($ruta . $file);
if (is_dir($ruta . $file) && $file!="." && $file!=".."){
listar_directorios_ruta($ruta . $file . "/");
}
}
closedir($dh);
}
}else
echo "<br>No es ruta valida";
}
  #6 (permalink)  
Antiguo 12/04/2011, 13:58
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: mostrar arbol de archivos y carpetas

Estas utilizando PHP 4 ?, si no es el caso, deberias utilizar RecursiveDirectoryIterator, un ejemplo:

Código PHP:
Ver original
  1. $path = '/path/to/dir';
  2. $iterator = new RecursiveIteratorIterator(
  3.                 new RecursiveDirectoryIterator($path),
  4.                 RecursiveIteratorIterator::SELF_FIRST);
  5.  
  6. foreach($iterator as $file) {
  7.     echo $file . PHP_EOL;
  8. }

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 12/04/2011, 14:06
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: mostrar arbol de archivos y carpetas

wao !! que código más lindo !. gracias, ahora me lo estudio bien
  #8 (permalink)  
Antiguo 12/04/2011, 14:30
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: mostrar arbol de archivos y carpetas

y como pudiera hacer para que me lo muestre así

<ul id="browser" class="filetree treeview-famfamfam">
<li><span class="folder">Cliente</span>
<ul>
<li><span class="folder">Folder 1</span>
<ul>
<li><span class="file">File 1.1</span></li>
<li><span class="file">File 1.2</span></li>
</ul>
</li>
<li class="closed"><span class="folder">Folder 2</span>
<ul>
<li><span class="file">File 2.1</span></li>
</ul>
</li>
</ul>
</li>
</ul>
  #9 (permalink)  
Antiguo 12/04/2011, 18:17
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: mostrar arbol de archivos y carpetas

A ver, podrías hacer un decorator, algo así:

Código PHP:
Ver original
  1. interface Renderer
  2. {
  3.     public function render();
  4. }
  5.  
  6. class HTMLTreeDecorator implements Renderer
  7. {
  8.     protected $_iterator;
  9.  
  10.     public function __construct(RecursiveIteratorIterator $it)
  11.     {
  12.         $this->_iterator = $it;
  13.     }
  14.  
  15.     public function render()
  16.     {
  17.        // iterate container
  18.         $prevDepth = -1;
  19.         $ulClass   = 'list';
  20.         $html      = '';
  21.  
  22.         foreach ($this->_iterator as $file) {
  23.  
  24.             if($this->_iterator->isDot()) continue;
  25.  
  26.             $depth = $this->_iterator->getDepth();
  27.  
  28.             if ($depth > $prevDepth) {
  29.  
  30.                 if ($ulClass && $depth ==  0) {
  31.                     $ulClass = ' class="' . $ulClass . '"';
  32.                 } else {
  33.                     $ulClass = '';
  34.                 }
  35.                 $html .= '<ul' . $ulClass . '>' . PHP_EOL;
  36.  
  37.             } else if ($prevDepth > $depth) {
  38.  
  39.                 for ($i = $prevDepth; $i > $depth; $i--) {
  40.                     $html .=  '    </li>' . PHP_EOL;
  41.                     $html .=  '</ul>' . PHP_EOL;
  42.                 }
  43.                 // close previous li tag
  44.                 $html .= '    </li>' . PHP_EOL;
  45.             } else {
  46.                 // close previous li tag
  47.                 $html .= '    </li>' . PHP_EOL;
  48.             }
  49.  
  50.             $html .= '    <li>' . PHP_EOL
  51.                    . '        ' . $file . PHP_EOL;
  52.  
  53.             // store as previous depth for next iteration
  54.             $prevDepth = $depth;
  55.         }
  56.  
  57.         if ($html) {
  58.             // done iterating container; close open ul/li tags
  59.             for ($i = $prevDepth+1; $i > 0; $i--) {
  60.                 $html .= '    </li>' . PHP_EOL
  61.                        . '</ul>' . PHP_EOL;
  62.             }
  63.             $html = rtrim($html, PHP_EOL);
  64.         }
  65.  
  66.         return $html;
  67.  
  68.     }
  69.  
  70.     public function __toString()
  71.     {
  72.         try {
  73.             return $this->render();
  74.         } catch (Exception $e) {}
  75.     }
  76.  
  77. }

y para utilizarlo seria:

Código PHP:
Ver original
  1. $path = '/path/to/dir';
  2. $iterator = new RecursiveIteratorIterator(
  3.                 new RecursiveDirectoryIterator($path),
  4.                 RecursiveIteratorIterator::SELF_FIRST);
  5.  
  6. $decorator = new HTMLTreeDecorator($iterator);
  7. echo $decorator;

Nota: el render es parte de Zend_Navigation :)

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #10 (permalink)  
Antiguo 13/04/2011, 08:14
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: mostrar arbol de archivos y carpetas

pero yo no uso el framework Zend, :(
  #11 (permalink)  
Antiguo 13/04/2011, 08:34
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: mostrar arbol de archivos y carpetas

Y en que parte del código ves a Zend ?, decorator es un patrón de diseño, uno de los tantos que implementa Zend, pero el ejemplo que te pase, es una clase que al iterar utliza la misma lógica de Zend_Navigation, pero no incluye ninguna parte del FW.

PD: lo probaste ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #12 (permalink)  
Antiguo 13/04/2011, 08:54
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: mostrar arbol de archivos y carpetas

copié el código y me da error, por eso pensé que era pq hacia uso de alguna clase del FW, no lo he podido usar
  #13 (permalink)  
Antiguo 13/04/2011, 08:59
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: mostrar arbol de archivos y carpetas

mmmmm, que raro, tal cual esta debería funcionar, que versión de PHP tenes ? y que error te tira ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #14 (permalink)  
Antiguo 13/04/2011, 09:17
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: mostrar arbol de archivos y carpetas

php 5.3

al final resolví con esta

function listar_directorios_ruta($ruta)
{
if (is_dir($ruta))
{
if ($dh = opendir($ruta))
{
while (($file = readdir($dh)) !== false)
{

if ((!is_file($file))and($file!='.')and($file!='..'))
{
if ( filetype($ruta . $file) == "dir")
{
echo '<li>
<span class="folder">'.$file.'</span>
<ul>';
}

//if ( filetype($ruta . $file) == "dir") echo "abro dir";
//echo "<br>Nombre de archivo: $file : Es un: " . filetype($ruta . $file);
else
{
echo '<li><span class="file">'.$file.'</span></li>';
//echo "<br>$file"; // : Es un: " . filetype($ruta . $file);
}
}


if (is_dir($ruta . $file) && $file!="." && $file!="..")
{
listar_directorios_ruta($ruta . $file . "/");
//echo " cierro directorio";
echo '</ul> </li> ';
}
}
closedir($dh);
}
}
else
echo "<br>No es ruta valida";
}
cual de estas funciones que uso es la que no me recomiendas que use que me diste la sugerencia de RecursiveDirectoryIterator ????

Etiquetas: carpetas, arboles
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 04:44.