Ver Mensaje Individual
  #2 (permalink)  
Antiguo 17/11/2010, 19:59
Avatar de portalmana
portalmana
 
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 7 meses
Puntos: 80
Respuesta: Ordenar acrhivos por fecha con php

Bueno ya que no responden, te diré que tengo una clase que recorre directorios y trae sus propiedades, como vi interesante eso de ordenar por distintas propiedades del archivo le agregue el método ordenar, que te podría ayudar.

Directorio.php
Código PHP:
Ver original
  1. <?php
  2. /**
  3.  * Clase Directorio.
  4.  * Se encarga de recorrer directorios y proporcionar informacion de los archivos y
  5.  * directorios que contiene.
  6.  *
  7.  * @package     archivos creado en el projecto opet
  8.  * @copyright   2010 - ObjetivoPHP
  9.  * @license     Gratuito (Free) http://www.opensource.org/licenses/gpl-license.html
  10.  * @author      Marcelo Castro (ObjetivoPHP)
  11.  * @link        [email protected]
  12.  * @version     0.3.0 (24/03/2009 - 17/11/2010)
  13.  */
  14. class Directorio
  15. {
  16.     /**
  17.      * Especifica que tipo de listado se retornara.
  18.      * En este caso solo se listan los directorios.
  19.      */
  20.     const OP_LIST_DIRECTORIOS = 1;
  21.  
  22.     /**
  23.      * Especifica que tipo de listado se retornara.
  24.      * En este caso solo se listan los archivos.
  25.      */
  26.     const OP_LIST_ARCHIVOS    = 2;
  27.  
  28.     /**
  29.      * Especifica que tipo de listado se retornara.
  30.      * En este caso lista directorios y archivos.
  31.      */
  32.     const OP_LIST_AMBOS       = 3;
  33.  
  34.     /**
  35.      * Solo se accedera de este directorio hacia abajo, a sus hijos no se listan
  36.      * los padres del directorio. Es el directorio Base.
  37.      * @var string
  38.      */
  39.     private $_dirBase = './';
  40.  
  41.     /**
  42.      * Marca cuantos directorios hacia abajo listara. Con cero solo listara el
  43.      * directorio base.
  44.      * @var integer
  45.      */
  46.     private $_profundidadEscaneo = 0;
  47.  
  48.     /**
  49.      * Configuramos que tipo de resultados queremos. Solo archivos, solo
  50.      * directorios o retorna ambos.
  51.      * @var integer
  52.      */
  53.     private $_listarDir = 3;
  54.  
  55.     /**
  56.      * Contiene los tipos de archivos que se listaran.
  57.      * @var array
  58.      */
  59.     private $_tipoArchivos = array();
  60.  
  61.     /**
  62.      * Guarda los resultados de la busqueda.
  63.      * @var array
  64.      */
  65.     private $_resultados = array();
  66.  
  67.     /**
  68.      * Metodo __construct.
  69.      * @param   string $dirExploracion  Directorio base de la exploracion.
  70.      *                                  No se puede utilizar ../, en caso de necesitar
  71.      *                                  y hacia atras utilizar direcciones absolutas.
  72.      * @return  void
  73.      */
  74.     public function  __construct($dirExploracion)
  75.     {
  76.         if (strpos('../', $dirExploracion)) {
  77.             trigger_error('Directorio de Exploracion no valido.', E_USER_ERROR);
  78.         }
  79.         $this->_dirBase = $dirExploracion;
  80.         date_default_timezone_set('America/Montevideo');
  81.     }
  82.  
  83.     /**
  84.      * Metodo setProfundidadEscaneo.
  85.      * @param   integer $profundidad    Cantidad de directorios que se analizaran
  86.      *                                  en cascada.
  87.      * @return  void
  88.      */
  89.     public function setProfundidadEscaneo($profundidad = 0)
  90.     {
  91.         $this->_profundidadEscaneo = (int) $profundidad;
  92.     }
  93.  
  94.     /**
  95.      * Metodo setListarDirectorios.
  96.      * @param   integer     $dir 1 directorios, 2 archivos, 3 ambos.
  97.      * @return  void
  98.      */
  99.     public function setListarDirectorios($listado = 3)
  100.     {
  101.         switch ($listado) {
  102.             case Directorio::OP_LIST_DIRECTORIOS:
  103.                 $this->_listarDir   = Directorio::OP_LIST_DIRECTORIOS;
  104.                 break;
  105.             case Directorio::OP_LIST_ARCHIVOS:
  106.                 $this->_listarDir   = Directorio::OP_LIST_ARCHIVOS;
  107.                 break;
  108.             case Directorio::OP_LIST_AMBOS:
  109.                 $this->_listarDir   = Directorio::OP_LIST_AMBOS;
  110.                 break;
  111.             default :
  112.                 $this->_listarDir   = Directorio::OP_LIST_AMBOS;
  113.         }
  114.     }
  115.  
  116.     /**
  117.      * Metodo addTiposArchivosListar.
  118.      * @param   string  $extencion  Extencion de los archivos a listar.
  119.      * @return  void
  120.      */
  121.     public function addTiposArchivosListar($extencion)
  122.     {
  123.         $this->_tipoArchivos[] = addslashes($extencion);
  124.     }
  125.  
  126.     /**
  127.      * Metodo listar.
  128.      * Enruta las peticiones de listado al metodo correspondiente y retorna
  129.      * los datos obtenidos.
  130.      * @return array
  131.      */
  132.     public function listar()
  133.     {
  134.         switch ($this->_listarDir) {
  135.             case Directorio::OP_LIST_DIRECTORIOS:
  136.                 $this->_listarDirectorios();
  137.                 break;
  138.             case Directorio::OP_LIST_ARCHIVOS:
  139.                 $this->_listarArchivos();
  140.                 break;
  141.             case Directorio::OP_LIST_AMBOS:
  142.                 $this->_listarTodo();
  143.                 break;
  144.             default :
  145.                 $this->_listarTodo();
  146.         }
  147.         return $this->_resultados;
  148.     }
  149.  
  150.  
  151.     /**
  152.      * Metodo ordenar.
  153.      * Ordena los resultados de acuerdo a la clave elegida.
  154.      * @param   string  $clave  Clave por la cual se quiere ordenar.
  155.      * @param   boolean $asc    true para ascendente, false para descendente.
  156.      * @return  array
  157.      */
  158.     public function ordenar($clave = 'name', $asc = true)
  159.     {
  160.         if (empty($this->_resultados)) {
  161.             trigger_error('Primero debe usar la funcion listar o getNombresArchivos', E_USER_ERROR);
  162.         }
  163.  
  164.         $tiposOrden = array('date', 'dateUpdate', 'size', 'hash', 'hash' );
  165.         $ordenarPor = (in_array($clave, $tiposOrden))? $clave : 'name';
  166.         $ascDesc    = ($asc)? SORT_ASC : SORT_DESC;
  167.         $caracter   = 0;
  168.  
  169.         foreach ($this->_resultados as $ordenado) {
  170.             $tmpArray[] = $ordenado[$ordenarPor];
  171.             $caracter   = is_string($ordenado[$ordenarPor])? $caracter+1 : $caracter;
  172.         }
  173.        
  174.         $numero     = ($caracter)? SORT_STRING : SORT_NUMERIC;
  175.  
  176.         array_multisort($tmpArray, $ascDesc, $numero, $this->_resultados);
  177.         return $this->_resultados;
  178.     }
  179.  
  180.     /**
  181.      * Metodo _listarArchivos.
  182.      * Genera el arreglo de resultados correspondiente solo a archivos.
  183.      * @return void
  184.      */
  185.     public function _listarArchivos()
  186.     {
  187.         $objIterator = new RecursiveIteratorIterator($obj_Directory = new RecursiveDirectoryIterator($this->_dirBase),
  188.                                                      RecursiveIteratorIterator::SELF_FIRST);
  189.         $objIterator->setMaxDepth($this->_profundidadEscaneo);
  190.         // Recorro los Archivos.
  191.         foreach ($objIterator as $file) {
  192.             if (is_file($file)) {
  193.                 $ext        = substr($file, strripos($file, '.')+1);
  194.                 if (in_array($ext, $this->_tipoArchivos)) {
  195.                     $this->_resultados[$file->__toString()] = array('date'      => date("Y-m-d H:i",$obj_Directory->getATime()),
  196.                                                                     'dateUpdate'=> date("Y-m-d H:i",$obj_Directory->getMTime()),
  197.                                                                     'size'      => filesize($file),//$obj_Directory->getSize(),
  198.                                                                     'hash'      => sha1_file($file),
  199.                                                                     'name'      => substr($file, strripos($file, DIRECTORY_SEPARATOR )+1));
  200.                 }
  201.             }
  202.         }
  203.         ksort($this->_resultados);
  204.     }
  205.  
  206.     /**
  207.      * Metodo _listarDirectorios.
  208.      * Genera el arreglo de resultados correspondiente solo a directorios.
  209.      * @return void
  210.      */
  211.     public function _listarDirectorios()
  212.     {
  213.         $objIterator = new RecursiveIteratorIterator($obj_Directory = new RecursiveDirectoryIterator($this->_dirBase),
  214.                                                      RecursiveIteratorIterator::SELF_FIRST);
  215.         $objIterator->setMaxDepth($this->_profundidadEscaneo);
  216.         // Recorro los directorios.
  217.         foreach ($objIterator as $file) {
  218.             if (is_dir($file)) {
  219.                 $this->_resultados[$file->__toString()] = array('date'      => date("d-m-Y H:i",$obj_Directory->getATime()),
  220.                                                                 'dateUpdate'=> date("d-m-Y H:i",$obj_Directory->getMTime()));
  221.             }
  222.         }
  223.     }
  224.  
  225.     /**
  226.      * Metodo _listarTodo.
  227.      * Genera el arreglo de resultados correspondiente a directorios y archivos.
  228.      * @return void
  229.      */
  230.     public function _listarTodo()
  231.     {
  232.         $this->_listarDirectorios();
  233.         $this->_listarArchivos();
  234.         ksort($this->_resultados);
  235.     }
  236.  
  237.     /**
  238.      * Metodo getNombresArchivos.
  239.      * Retorna solo los nombre de archivos.
  240.      * @return array
  241.      */
  242.     public function getNombresArchivos()
  243.     {
  244.         $objIterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($this->_dirBase),
  245.                                                      RecursiveIteratorIterator::SELF_FIRST);
  246.         $objIterator->setMaxDepth($this->_profundidadEscaneo);
  247.         // Recorro los Archivos.
  248.         foreach ($objIterator as $file) {
  249.             if (is_file($file)) {
  250.                 $ext        = substr($file, strripos($file, '.')+1);
  251.                 if (in_array($ext, $this->_tipoArchivos)) {
  252.                     $this->_resultados[] = substr($file, strripos($file, DIRECTORY_SEPARATOR )+1);
  253.                 }
  254.             }
  255.         }
  256.         return $this->_resultados;
  257.     }
  258. }

Explicación en próximo mensaje....
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp