Foros del Web » Programando para Internet » PHP »

Ordenar acrhivos por fecha con php

Estas en el tema de Ordenar acrhivos por fecha con php en el foro de PHP en Foros del Web. Muy buenas a todos, Resulta que estoy intentando listar archivos de un directorio para que se muestre en mi web. Sin embargo o consigo ordenarlos ...
  #1 (permalink)  
Antiguo 17/11/2010, 16:48
 
Fecha de Ingreso: diciembre-2009
Ubicación: Sevilla
Mensajes: 49
Antigüedad: 14 años, 4 meses
Puntos: 0
Ordenar acrhivos por fecha con php

Muy buenas a todos,

Resulta que estoy intentando listar archivos de un directorio para que se muestre en mi web. Sin embargo o consigo ordenarlos por fecha, si hay algiuen que pueda echarme un cable lo agradecería.

Os dejo el código que tengo hasta ahora para ver como se puede modificar para mostrar mis archivos ordenados por fecha:



<?php
// read all php file in the current directory
if ($dh = opendir('./')) {
$files = array();
while (($file = readdir($dh)) !== false) {
if (substr($file, strlen($file) - 4) == '.pdf') {
array_push($files, $file);
}
}
closedir($dh);
}

// Sort the files and display
sort($files);
echo "<ul>\n";
foreach ($files as $file) {
$title = Title($file);
echo "<li><a href=\"$file\" title=\"$title\">$title</a></li>\n";
}
echo "</ul>\n";

// Function to get a human readable title from the filename
function Title($filename) {
$title = substr($filename, 0, strlen($filename) - 4);
$title = str_replace('-', ' ', $title);
$title = ucwords($title);
return $title;
}
?>

Muchas gracias de antemano.

Saludos

Josamulai
  #2 (permalink)  
Antiguo 17/11/2010, 19:59
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 6 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
  #3 (permalink)  
Antiguo 17/11/2010, 20:00
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 6 meses
Puntos: 80
Respuesta: Ordenar acrhivos por fecha con php

Bueno ahora la idea de como funciona.
Código PHP:
Ver original
  1. // Incluimos La clase directorio.
  2. require_once 'Directorio.php';
  3.  
  4. // Instanciamos la clase y le pasamos el directorio de exploracion.
  5. $objDirectorio  = new Directorio('C:\AppServ\www\iconos_windows_vista\PNG\Actions');
  6.  
  7. // Cantidad de subdirectorios a explorar.
  8. $objDirectorio->setProfundidadEscaneo(0);
  9.  
  10. // Configuramos los tipos de archivos que queremos ver.
  11. $objDirectorio->addTiposArchivosListar('png');
  12. $objDirectorio->addTiposArchivosListar('ico');
  13.  
  14. // Vamos a configurar solo para ver archivos.
  15. $objDirectorio->setListarDirectorios(2);
  16. $sinOrdenar = $objDirectorio->listar();
  17.  
  18. $ordenado = $objDirectorio->ordenar('dateUpdate', true);
  19. echo '<pre>';
  20. var_dump($ordenado);
  21. echo '</pre>';

Bueno espero que por lo menos te sea de utilidad la función ordenar para tu cometido...
Saludos
__________________
"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
  #4 (permalink)  
Antiguo 27/07/2011, 08:07
 
Fecha de Ingreso: febrero-2011
Mensajes: 9
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Ordenar acrhivos por fecha con php

A mi me pasa algo parecido intente usar la clase que mencionan pero no me acomoda mis archivos necesito ayuda!!!
  #5 (permalink)  
Antiguo 27/07/2011, 17:33
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 6 meses
Puntos: 80
Respuesta: Ordenar acrhivos por fecha con php

Dime que código pusiste los datos y que es lo que obtuviste, haber si te puedo ayudar...

Saludos
__________________
"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
  #6 (permalink)  
Antiguo 28/07/2011, 15:27
 
Fecha de Ingreso: febrero-2011
Mensajes: 9
Antigüedad: 13 años, 2 meses
Puntos: 0
Sonrisa Respuesta: Ordenar acrhivos por fecha con php

ya lo pude resolver :porra:
de todas maneras muchas gracias

Etiquetas: fechas
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 17:46.