InicioApuntes Y MonografiasListar archivos de una carpeta con PHP
Aló a todoss
Para aquellos re interesados con el desarrollo en general, resulta que en mi trabajo, tuve que encontrar solución a éste interrogante no tan fácil de resolver para un iniciante (like me), decidí buscar funciones que me ayuden a resolverlo, es más una cuestión de ingenio me parece.

Finalmente, como era un poco desordenado, decidí crear una clase de php, la cual ayuda a dejar claro qué estamos haciendo realmente. Aclarar que no todo el source es de mi autoría, sino una recopilación de fuentes, la más grosa está citada en el archivo, el resto sólo son porciones...
Se los dejo junto con un ejemplo de uso.




listar_carpeta.php


<?php

/* Ésta clase es un conjunto de funciones encontradas, autores debajo.
 *
 * Los parámetros a indicar son los siguientes:
 * $ruta_carpeta: requerido. debe expresarse en formato absoluto.
 *         ej: Linux: "/opt/lampp/htdocs/test/"
 *         ej Win: "C:xampphtdocstest"
 *
 * $size_format: requerido. "B", "KB", "MB", "GB",...
 * $decimals: opcional, por defecto, dos decimales.
 *
 * Llamada alternativa a la func orderByDate(): parámetros opcionales
 * "desc" o "asc". por defecto "desc".
 *
 * Para obtener o asignar el array con el listado resultante, se deberá
 * llamar a getResultList()
 *
 * Las claves resultantes son "nombre", "size" y "fecha"
 *
 * Ejemplo de uso dentro de un foreach al array:
 * echo "El archivo " . $item["nombre"] . " pesa " . $item["size"] . " y se creó el " . date('d-m-Y', $item['fecha']) . "<br>";
 *
 * @author     Juan Manuel Fernandez (clase, constructor, orderByDate, getListAndProp).
 * @author     JR de if-not-true-then-false.com (_getFormat, con modificaciones).
 * @version    1.1 */
class ListFolder {
    private $route;
    private $size_format;
    private $decimals;
    private $bytes;
    private $units;
    private $value;
    private $pow;
    private $lista;
    private $lista_con_propiedades;
    private $result;
    
    function __construct($ruta_carpeta, $size_format = "", $decimals = 2) {
        $this->size_format = $size_format;
        $this->decimals = $decimals;
        $this->result = $this->_getListAndProp($ruta_carpeta);
    }
    
    private function _getListAndProp($route) {
        $this->route = $route;
        $this->lista = array_diff(scandir($this->route), array('..', '.'));
        $this->lista_con_propiedades = array();
        foreach($this->lista as $item) {
            array_push($this->lista_con_propiedades,
                    array(
                       'nombre' => $item,
                       'size'     => $this->_getFormat(filesize($this->route . $item)),
                       'fecha'    => filemtime($this->route . $item)
                    )
            );
        }
        return $this->lista_con_propiedades;
    }
    
    private function _getFormat($bytes) {
        $this->bytes = $bytes;
        $this->units = array('B'  => 0,
                             'KB' => 1,
                             'MB' => 2,
                             'GB' => 3,
                             'TB' => 4, 
                             'PB' => 5,
                             'EB' => 6,
                             'ZB' => 7,
                             'YB' => 8);
        
        $this->value = 0;
        if ($this->bytes > 0) {
            // Generar prefijo automático por bytes 
            // Si se da prefijo erróneo:
            if ( ! array_key_exists($this->size_format, $this->units)) {
                $this->pow = floor(log($this->bytes)/log(1024));
                $this->size_format = array_search($this->pow, $this->units);
            }
            
            // Calcular el valor de los bytes por prefijo
            $this->value = ($this->bytes/pow(1024, floor($this->units[$this->size_format])));
        }
        
        if (!is_numeric($this->decimals) || $this->decimals < 0) {
            $this->decimals = 2;
        }
        
        // Formatear salida
        return sprintf('%.' . $this->decimals . 'f ' . $this->size_format, $this->value);
    }
    
    public function orderByDate($orientation = "desc") {
        
        function ordenar($a, $b) {
            return $a['fecha'] - $b['fecha'];
        }
            // La función usort redefine en forma directa al array contenido en la variable.
            // Si hay dudas, php.net
        usort($this->result, 'ordenar');
        
        if ($orientation == "desc") {
            $this->result = array_reverse($this->result);
        }
    }
    
    public function getResultList() {
        return $this->result;
    }
    
 // End class
}


ejemplo.php (primero incluir el archivo de la clase, directamente ó con include())

<?php

    // Incluímos el archivo que contiene la clase
include("listar_carpeta.php");

    // Creamos un objeto a partir de la clase.
$lista_archivos = new ListFolder("/directorio/para/listar/", "KB", 2);
$lista_archivos->orderByDate(); // Ésto es para ordenar por fecha y es opcional.
$lista_desc = $lista_archivos->getResultList(); // Obtener el array resultante.

// Ántes de utilizarlo en una tabla por ejemplo, podemos probar si funciona de ésta forma:
print_r($lista_desc);

// Ó vamos probando las claves que nos devuelve en un ciclo foreach:
foreach($lista_desc as $item) {
    echo "El archivo " . $item["nombre"] . " pesa " . $item["size"] . " y se creó el " . date('d-m-Y', $item['fecha']) . "<br>";
}


Espero sea de utilidad, sobre todo por seguir el modelo de POO

Tengo un amigo que vigila si comentás o no...

Listar archivos de una carpeta con PHP
Datos archivados del Taringa! original
20puntos
825visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
4visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

j
juanmaloco🇦🇷
Usuario
Puntos0
Posts3
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.