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
ejemplo.php (primero incluir el archivo de la clase, directamente ó con include())
Espero sea de utilidad, sobre todo por seguir el modelo de POO
Tengo un amigo que vigila si comentás o no...
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...