Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Listando

Estas en el tema de Listando en el foro de PHP en Foros del Web. Hola, estoy intentando listar los archivos y carpetas de un directorio. Código PHP: <?php $listar  =  null ; $directorio  =  opendir  ( "Categorias/" ); while( ...
  #1 (permalink)  
Antiguo 31/08/2015, 05:24
Avatar de Marcos315  
Fecha de Ingreso: agosto-2015
Ubicación: BS AS
Mensajes: 21
Antigüedad: 9 años, 2 meses
Puntos: 2
Pregunta Listando

Hola, estoy intentando listar los archivos y carpetas de un directorio.

Código PHP:
<?php
$listar 
null;
$directorio opendir ("Categorias/");
while(
$elemento readdir($directorio))
{
    if(
$elemento != '.' && $elemento != '..' )
{    
    if (
is_dir("Categorias/".$elemento))
{
        
$listar .= "<li><a href='Categorias/$elemento' target='_blank'>$elemento/</a></li>";
        }
    else
    {
        
$listar .= "<li><a href='Categorias/$elemento' target='_blank'>$elemento</a></li>";
    }
    }
}
?>
Código:
<!DOCTYPE HTML>
<html>
<head>
<meta charset=UTF-8">
</head>
<body>
<h1>Listar archivos y carpetas de un directorio</h1>
<h3>Listado de archivos y carpetas del directorio "Categorias/"</h3>
<ul>
	<?php echo $listar ?>
</ul>
</body>
</html>

- Mi directorio base es Categorias, y mis subdirectorios son: Primera_División, Primera_B_Nacional, Primera_B2, Primera_C3, Primera_D4.
tengo una pagina html por cada categoria.

- Como puedo hacer que los directorios que voy agregando se agreguen directamente en la pagina .html especifica de cada categoria, y a la vez eso me permita abrir cada link q se agrego ?.
  #2 (permalink)  
Antiguo 31/08/2015, 16:21
Avatar de Marcos315  
Fecha de Ingreso: agosto-2015
Ubicación: BS AS
Mensajes: 21
Antigüedad: 9 años, 2 meses
Puntos: 2
Respuesta: Listar Directorios

conseguí listar el directorio en 2 columnas, con este código

Código PHP:
<?php
 
$columns 
2;
 
$ele = array();
$directorio opendir("Categorias");
 
while (
$archivo readdir($directorio)) {
    
$nombreArch ucwords($archivo);
    
$nombreArch str_replace("..""Atras"$nombreArch);
    
$ele[] = $nombreArch;
}
 
closedir($directorio);
 
echo 
"<table width='100%' align='center'";
echo 
"border='1' cellpadding='3' cellspacing='3'>";
 
$z 0;
 
    foreach (
$ele as $arc) {
        if (
$z $columns == 0) {
            echo 
"<tr>";
        }
        echo 
'<td><a href="' $arc '">' $arc '</a></td>';
        
$z++;
 
        if (
$z $columns == 0) {
            echo 
"</tr>";
        }
}
 
echo 
'</table>';
    
?>
- El problema es que no ordena los directorios alfabéticamente.

Buscando leí que hay que colocarlos en un array es así ? encontré esto

Código PHP:
   # ponemos los valores en un array para poder ordenarlos
    
$list=array();
    while (
false !== ($arch readdir($gestor)))
    {
        if (
$arch != "." && $arch != "..")
        {
            
$list[]=$arch;
        }
    }
 
    
# ordenamos el array
    
sort($list);
 
    
# mostramos el contenido del array
    
echo "<ul>";
        foreach(
$list as $fileName)
        {
            echo 
"<p>
                -
                <a target='_blank' href=\""
.$directorio."/".$fileName."\">".$fileName."</a>
                </p>\n"
;
        }
    echo 
"<ul>";
}
    
?> 
Pero no se como unir eso a mi código base. Alguien puede ayudarme ? Gracias.
  #3 (permalink)  
Antiguo 06/09/2015, 17:11
Avatar de Marcos315  
Fecha de Ingreso: agosto-2015
Ubicación: BS AS
Mensajes: 21
Antigüedad: 9 años, 2 meses
Puntos: 2
Respuesta: Listando

- Todavía no conseguí listar alfabéticamente.
  #4 (permalink)  
Antiguo 06/09/2015, 23:36
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Listando

Cita:
Iniciado por Marcos315 Ver Mensaje
- Todavía no conseguí listar alfabéticamente.
Pues podrías ordenar la lista $ele que ya tienes para el mismo efecto.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 07/09/2015, 12:30
Avatar de Marcos315  
Fecha de Ingreso: agosto-2015
Ubicación: BS AS
Mensajes: 21
Antigüedad: 9 años, 2 meses
Puntos: 2
Respuesta: Listando

Gracias por ayudarme a listar alfabéticamente, pateketrueke . Estuve varios días buscando y no podía resolverlo.
Funciona perfecto, lo dejo acá quien sabe le sirve a otro también.

Código PHP:
<?php 
$columns 
2
  
    
$ele = array(); 
    
$directorio opendir("Categorias/Camp_Primera_Division/"); 
  
        while (
$archivo readdir($directorio)) 
        { 
            
$nombreArch ucwords($archivo); 
             
$nombreArch str_replace("..""Atras"$nombreArch); 
            
$ele[] = $nombreArch
        } 
  
closedir($directorio); 
asort ($ele);
  
echo 
"<table width='100%' align='center'"
echo 
"border='1' cellpadding='3' cellspacing='3'>"
  
$z 0
  
    foreach (
$ele as $arc
        { 
        if (
$z $columns == 0
        { 
            echo 
"<tr>"
        } 
        echo 
'<td><a href="' $arc '">' $arc '</a></td>'
        
$z++; 
  
        if (
$z $columns == 0
        { 
            echo 
"</tr>"
        } 
        } 
  
echo 
'</table>'
?>
una pregunta, cuando lista aparece así: www.misitio.com/archivo

en la linea que dice:

echo '<td><a href="' . $arc . '">' . $arc . '</a></td>';

como puedo modificarlo para que aparezca así:

www.misitio.com/Categorias/Camp_Primera_Division/archivo ?
  #6 (permalink)  
Antiguo 07/09/2015, 19:49
Avatar de Marcos315  
Fecha de Ingreso: agosto-2015
Ubicación: BS AS
Mensajes: 21
Antigüedad: 9 años, 2 meses
Puntos: 2
Respuesta: Listando

Finalmente conseguí arreglar la ruta, leyendo en el foro encontré varios ejemplos y fui probando hasta que este funciono.

Código PHP:
<?php  
$columns 
2;  
   
    
$ele = array();  
    
$directorio opendir("Categorias/Camp_Primera_Division");  
   
        while (
$archivo readdir($directorio))  
        {  
            
$nombreArch ucwords($archivo);  
            
$nombreArch str_replace("..""Atras"$nombreArch);  
            
$ele[] = $nombreArch;  
        }  
   
closedir($directorio);  
asort ($ele); 
   
echo 
"<table width='100%' align='center'";  
echo 
"border='1' cellpadding='3' cellspacing='3'>";  
   
$z 0;  
   
    foreach (
$ele as $arc)  
        {  
        if (
$z $columns == 0)  
        {  
            echo 
"<tr>";  
        }  
        echo 
'<td><a target=_blank href="'.$ruta.'Categorias/Camp_Primera_Division/'.$arc.'">'.$arc.'</a></td>';  
        
$z++;  
   
        if (
$z $columns == 0)  
        {  
            echo 
"</tr>";  
        }  
        }  
   
echo 
'</table>';  
?>
Que alegría .

- Solo que aparece el index de los directorios, y también aparecen . y Atrás
como puedo hacer para evitar que se muestren ?
  #7 (permalink)  
Antiguo 07/09/2015, 19:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Listando

Cita:
como puedo hacer para evitar que se muestren ?
Pues con alguna condición lógica:

Código PHP:
Ver original
  1. if ($archivo !== '.' || $archivo !== '..') {
  2.   // no se trata de . ni .., entonces agregamos
  3. }
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 07/09/2015, 20:46
Avatar de Marcos315  
Fecha de Ingreso: agosto-2015
Ubicación: BS AS
Mensajes: 21
Antigüedad: 9 años, 2 meses
Puntos: 2
Respuesta: Listando

Hola, pateketrueke:

agregue la condición que me diste, quedo así:

Código PHP:
<?php   
$columns 
2;   
    
    
$ele = array();   
    
$directorio opendir("Categorias/Camp_Primera_Division");   
    
        while (
$archivo readdir($directorio))   
        {   
            
$nombreArch ucwords($archivo);   
            
$nombreArch str_replace("."".."$nombreArch);   
            
$ele[] = $nombreArch;   
        }  
       
// no se trata de . ni .., entonces agregamos
        
if ($archivo !== '.' || $archivo !== '..') {

}
closedir($directorio);   
asort ($ele);  
    
echo 
"<table width='100%' align='center'";   
echo 
"border='1' cellpadding='3' cellspacing='3'>";   
    
$z 0;   
    
    foreach (
$ele as $arc)   
        {   
        if (
$z $columns == 0)   
        {   
            echo 
"<tr>";   
        }   
        echo 
'<td><a target=_blank href="'.$ruta.'Categorias/Camp_Primera_Division/'.$arc.'">'.$arc.'</a></td>';   
        
$z++;   
    
        if (
$z $columns == 0)   
        {   
            echo 
"</tr>";   
        }   
        }   
    
echo 
'</table>';   
?>
- Me parece que hice algo errado porque al inicio del listado del directorio, aparece
. y .. para evitar que aparezcan tengo que borrar alguna línea ?
Gracias.
  #9 (permalink)  
Antiguo 07/09/2015, 21:02
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Listando

Es que dicha lógica no era para todo el script.

En el while(), que es donde vas agregando los archivos, ahí es donde debes verificar antes de agregar, etc.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 07/09/2015, 21:27
Avatar de Marcos315  
Fecha de Ingreso: agosto-2015
Ubicación: BS AS
Mensajes: 21
Antigüedad: 9 años, 2 meses
Puntos: 2
Respuesta: Listando

Bueno, pateketrueke:

Finalmente, gracias a tu ayuda, lo conseguí !!jaja
Saque unas líneas, y las reemplace quedo así.

Código PHP:
<?php   
$columns 
2;   
   
    
$directorio opendir("Categorias/Camp_Primera_Division");   
    
# ponemos los valores en un array para poder ordenarlos
    
$ele = array();
    while (
$archivo readdir($directorio))
    {
        if (
$archivo != "." && $archivo != "..")
        {
           
$nombreArch ucwords($archivo); 
           
$ele[] = $nombreArch;
        }
    }

closedir($directorio);   
asort ($ele);  
    
echo 
"<table width='100%' align='center'";   
echo 
"border='1' cellpadding='3' cellspacing='3'>";   
    
$z 0;   
    
    foreach (
$ele as $arc)   
        {   
        if (
$z $columns == 0)   
        {   
            echo 
"<tr>";   
        }   
        echo 
'<td><a target=_blank href="'.$ruta.'Categorias/Camp_Primera_Division/'.$arc.'">'.$arc.'</a></td>';   
        
$z++;   
    
        if (
$z $columns == 0)   
        {   
            echo 
"</tr>";   
        }   
        }   
    
echo 
'</table>';   
?>
Quiero agradecerte pq fuiste el único que me respondió, gracias por tu paciencia, soy nuevo. Voy a continuar leyendo el foro y ver el manual, tienen muchos aportes.

Buenas noches
  #11 (permalink)  
Antiguo 07/09/2015, 22:02
Avatar de Marcos315  
Fecha de Ingreso: agosto-2015
Ubicación: BS AS
Mensajes: 21
Antigüedad: 9 años, 2 meses
Puntos: 2
Respuesta: Listando

Volvi...

Una pregunta, se puede que el listado de directorios se abra en una ventana tipo pop up ?.
  #12 (permalink)  
Antiguo 07/09/2015, 22:20
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Listando

Cita:
Iniciado por Marcos315 Ver Mensaje
Volvi...

Una pregunta, se puede que el listado de directorios se abra en una ventana tipo pop up ?.
Claro que se puede, pero por favor, no mezcles varios temas en uno solo.

Abre un tema para separar bien las cosas.

Saludos.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #13 (permalink)  
Antiguo 08/09/2015, 09:56
Avatar de Marcos315  
Fecha de Ingreso: agosto-2015
Ubicación: BS AS
Mensajes: 21
Antigüedad: 9 años, 2 meses
Puntos: 2
Respuesta: Listando

Ok, muchas gracias.

Etiquetas: columnas, directorios, lista
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 13:01.