Foros del Web » Programando para Internet » PHP »

readdir ordenado por fecha

Estas en el tema de readdir ordenado por fecha en el foro de PHP en Foros del Web. Saludos, tengo este código que lo que hace es leer un directorio y listarlo, la cuestión es que necesito listar estos archivos por órden de ...
  #1 (permalink)  
Antiguo 17/11/2004, 14:05
 
Fecha de Ingreso: agosto-2004
Ubicación: Valencia
Mensajes: 149
Antigüedad: 13 años, 4 meses
Puntos: 0
readdir ordenado por fecha

Saludos,
tengo este código que lo que hace es leer un directorio y listarlo, la cuestión es que necesito listar estos archivos por órden de fecha, es decir, por órden inverso de fecha, primero los nuevos y después los más antiguos, no he sido capaz de hacerlo, a ver si alguien me tira una manita.
Este es el código:

Código PHP:
<?
            
$dir
="fotos/$fila->nombre";
echo 
$dir;
$directorio=opendir($dir); 
while (
$archivo readdir($directorio)) {

if (
$archivo==".") { echo " "; } else if ($archivo=="..") { echo " "; } else {

$archivo2=$archivo;
$archivo str_replace("_""&nbsp;"$archivo);

echo 
"$dir/$archivo2";
?>
__________________
www.adimensional.info Adimensional
www.cientosderecetas.com Cientos de recetas
  #2 (permalink)  
Antiguo 17/11/2004, 14:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Tendrás que añadir tus archivos a un array las fehcas de creación de los archivos con el objetivo de luego ordernar dicho array y leerlo nuevamente con cualquier tipo de bucle.

Directamente no hay parámetro para "leer" los archivos en forma ordenada (por lo menos desde funciones nativas de PHP como las que usas .. )

Código PHP:
$i=0;
while ( ....)
// etc ...

$fecha_creacion=filemtime($dir.'/'.$archivo2); // no recuerdo si es filemtime() u otra afin para obtener la fecha de creación del archivo . .en tal caso visita: php.net para confirmarlo.

// crea un array bidimensional ...
$archivo_array[$i]['archivo']=$archivo;
$archivo_array[$i]['fecha_creacion']=$fecha_creacion;
// incrementas contador para próximo archivo ..
$i++;

Y funciones para ordenar un array bidimensional de ese tipo en:
sort() (o array_multisort() )
http://www.php.net/manual/en/function.sort.php
(en los comentarios de los usuarios de dicha funcion)

Una vez que lo tengas ordenado .. usas un bucle for() por ejemplo para leerlo. (el array)

Un saludo,
  #3 (permalink)  
Antiguo 21/11/2004, 15:25
 
Fecha de Ingreso: agosto-2004
Ubicación: Valencia
Mensajes: 149
Antigüedad: 13 años, 4 meses
Puntos: 0
Gracias Cluster, voy a probarlo y si funciona postearé el resultado para quien le pueda servir.
Salu2.
__________________
www.adimensional.info Adimensional
www.cientosderecetas.com Cientos de recetas
  #4 (permalink)  
Antiguo 23/11/2004, 08:07
 
Fecha de Ingreso: agosto-2004
Ubicación: Valencia
Mensajes: 149
Antigüedad: 13 años, 4 meses
Puntos: 0
Pues no he sido capaz, a mi los arrays me vuelven de cabeza, os pondo el código hasta donde he llegado a ver si veis el error o errores
Código PHP:
<?
$seccion
=$_POST['seccion'];
$dir="fotos/$seccion";
$directorio=opendir($dir);  
echo 
"<b>Directorio actual:</b> <br>&nbsp;&nbsp;&nbsp;$dir<br>";  
echo 
"<b>Archivos:</b> <br>"
$num=0;
$i=0
while (
$archivo readdir($directorio)) {
if (
$archivo==".") { echo " "; } else if ($archivo=="..") { echo " "; } else {
$num++;
$i++; 
$fecha_creacion=filemtime($dir.'/'.$archivo); 
$archivo_array[$i]['archivo']=$archivo
$archivo_array[$i]['fecha_creacion']=$fecha_creacion
sort($archivo_array[$i]); 
 } }
closedir;
foreach (
$archivo_array[$i] as $archivo){ 
$archivo str_replace("_""&nbsp;"$archivo); 
echo 
$archivo
echo 
"<br>";
include (
'config.php');
$sql "UPDATE famosas SET fotos='$num' WHERE id_famosa='$seccion'";
$result mysql_query($sql);

echo 
"Hay $num fotos dentro de esta carpeta, <a href=\"tabla.php\">Volver</a>";
 
?>
La variable sección viene de un formulario anterior y funciona, de paso aver si me podeis pasar alguna dirección de un sitio donde explique los arrays, con el dephpnet no me entero.
Salu2 y gracias.
__________________
www.adimensional.info Adimensional
www.cientosderecetas.com Cientos de recetas
  #5 (permalink)  
Antiguo 23/11/2004, 09:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Esa funcion:
sort($archivo_array[$i]);
en el bucle while() no corresponde ...

Se trata de ir "creando" tu array a base de lo que va leyendo el bucle while() que usas y sus funciones readir() y demás ... para que al terminar este (de generar tu array) apliques la función sort() o equivalente para ordenar el array ..

Esta función:
$archivo = str_replace("_", "&nbsp;", $archivo);

deberías aplicarla en el mismo bucle while() que usas para obtener los nombres de los archivos de tu directorio indicado y que a su vez generas ese array ....

El código siguiente:
$sql = "UPDATE famosas SET fotos='$num' WHERE id_famosa='$seccion'";
$result = mysql_query($sql);

Que haces bajo tu bucle foreach() .. NO corresponde ahí .. estás ejecutando N veces la misma instrucción de "update" cuando ese dato es constante y lo obtienes ya más arriaba (en ese bucle while) a traves de ese contador que vas incrementando en dicho bucle .. Debes hacer ese "UPDATE" fuera del bucle foreach() . .justo fuera del } a la altura del echo "Hay ..... fotos ....".


El bucle foreach() .. tampoco es correcto:
foreach ($archivo_array[$i] as $archivo)

Tendría que ser:

Código PHP:
foreach ($archivo_array as $archivo){ 
echo 
"Nombre archivo: "$archivo['archivo']."<br>";
echo 
"Fecha creacion: "$archivo['fecha_creacion']."<br><br>";

Y .. el array "asociativo" bidimensional que generas .. ya te comenté que no se puede ordenar como un array normal con funciones como sort() sino que debes emplear array_multisort() .. también te comenté que hay soluciones por parte de los usuarios de dicha función en el manual oficial de PHP en www.php.net/array_multisort para ordenar de forma cómoda un array de ese tipo por el "campo" que indiques.

Un saludo,
  #6 (permalink)  
Antiguo 23/11/2004, 13:49
 
Fecha de Ingreso: agosto-2004
Ubicación: Valencia
Mensajes: 149
Antigüedad: 13 años, 4 meses
Puntos: 0
Pues parece que no íba muy encaminado, he cambiado lo que comentabas pero no logro que ordene por fecha y me da este error:
Warning: Argument 1 to array_multisort() is an unknown sort flag in C:\Programas\Foxserv\www\pruebas2\leer.php on line 18
que es justamente el multisort()
Código PHP:
<? 
$seccion
=$_POST['seccion']; 
$dir="fotos/$seccion"
$directorio=opendir($dir); 
echo 
"<b>Directorio actual:</b> <br>&nbsp;&nbsp;&nbsp;$dir<br>"
echo 
"<b>Archivos:</b> <br>"
$num=0
$i=0
while (
$archivo readdir($directorio)) { 
if (
$archivo==".") { echo " "; } else if ($archivo=="..") { echo " "; } else { 
$archivo str_replace("_""&nbsp;"$archivo); 
$num++; 
$i++; 
$fecha_creacion=filemtime($dir.'/'.$archivo); 
$archivo_array[$i]['archivo']=$archivo
$archivo_array[$i]['fecha_creacion']=$fecha_creacion
} } 
array_multisort($fecha_creacionSORT_DESC$archivoSORT_DESC); 
closedir
foreach (
$archivo_array as $archivo){ 
echo 
"Nombre archivo: "$archivo['archivo']."<br>"
echo 
"Fecha creacion: ";
 echo 
date("d-m-y"$archivo['fecha_creacion']);
echo 
"<br><br>"

include (
'config.php'); 
$sql "UPDATE famosas SET fotos='$num' WHERE id_famosa='$seccion'"
$result mysql_query($sql); 
echo 
"Hay $num fotos dentro de esta carpeta, <a href=\"tabla.php\">Volver</a>"
?>
Saludos.
__________________
www.adimensional.info Adimensional
www.cientosderecetas.com Cientos de recetas
  #7 (permalink)  
Antiguo 24/11/2004, 05:53
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. si te fijas bien en la documentación de "array_multisort()" .. no se usa como pretendes usarlo ..

Para ordenar un array de las características que usas .. puedes usar las propuestas de este mensaje .. que ... sí, se basan en array_multisort() pero .. para usarla como pretendes hay que hacer más cosas como aquí se detalla:

http://www.forosdelweb.com/f18/ordenar-array-bidemensional-131383/


Aquí tienes un mensaje que explica (fran86) como afrontar el problema usando un array asociativo simplemente ..
http://www.forosdelweb.com/showthrea...rray_multisort

Un saludo,
  #8 (permalink)  
Antiguo 24/11/2004, 06:53
 
Fecha de Ingreso: agosto-2004
Ubicación: Valencia
Mensajes: 149
Antigüedad: 13 años, 4 meses
Puntos: 0
Gracias de nuevo Cluster, al final he conseguido hacerlo, os lo pego:
Código PHP:
<? 
$seccion
=$_POST['seccion']; 
$dir="fotos/$seccion"
$directorio=opendir($dir); 
echo 
"<b>Directorio actual:</b> <br>&nbsp;&nbsp;&nbsp;$dir<br>"
echo 
"<b>Archivos:</b> <br>"
$num=0
$i=0
while (
$archivo readdir($directorio)) { 
if (
$archivo==".") { echo " "; } else if ($archivo=="..") { echo " "; } else { 
$archivo str_replace("_""&nbsp;"$archivo); 
$num++; 
$i++; 
$entradas[$archivo] = filemtime($dir."/".$archivo);

} } 
arsort ($entradas);
closedir
foreach (
$entradas as $archivo => $timestamp) { 
echo 
date("d-m-y"$timestamp)." - <b>$archivo</b><br>\n"
echo 
"<br><br>"

include (
'config.php'); 
$sql "UPDATE famosas SET fotos='$num' WHERE id_famosa='$seccion'"
$result mysql_query($sql); 
echo 
"Hay $num fotos dentro de esta carpeta, <a href=\"tabla.php\">Volver</a>"
?>
Con este scrip se pueden hacer galerías de fotos sin necesidad de base de datos.
__________________
www.adimensional.info Adimensional
www.cientosderecetas.com Cientos de recetas
  #9 (permalink)  
Antiguo 24/11/2004, 07:07
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ahora que ya lo tienes .. podrías probar el otro métod con el array "bidimensional" y las funciones para ordenar ese tipo de arrays multidimensionales .. como para poder hacer fácilmente una opción de "ordenar por" (fecha, o nombre .. por ejemplo)

Un saludo,
  #10 (permalink)  
Antiguo 24/11/2004, 08:05
 
Fecha de Ingreso: agosto-2004
Ubicación: Valencia
Mensajes: 149
Antigüedad: 13 años, 4 meses
Puntos: 0
En ello estoy, pero es un poco más complicado que el método que he utilizado, cuando lo tenga lo posteo también.
Salu2.
__________________
www.adimensional.info Adimensional
www.cientosderecetas.com Cientos de recetas
  #11 (permalink)  
Antiguo 24/07/2006, 07:43
 
Fecha de Ingreso: febrero-2006
Mensajes: 72
Antigüedad: 11 años, 9 meses
Puntos: 2
Necesidad similar

Hola genios...

A diferencia del amigo adimensional, Este código , me lista los archivos (word) que hay dentro de una carpeta, y me coloca un (enlace a ellos).- hasta aca una maravilla.!

El problema es que los ordena aleatoriamente y necesito que se ordenen por orden de llegada... tengan en cuenta que para cortar y pegar soy el mejor, pero para programar un tanto .

Saludos, estoy seguro que le servirá a muchos. Gracias por la ayuda que nos dan.

Código PHP:
<?php
$dir 
"./hg/";
$directorio=opendir($dir);
echo 
"<span>Descarga: formato Excel</span>";
echo 
"<br><br>";
while (
$archivo readdir($directorio)){
 if(
$archivo=='.' or $archivo=='..'){
 echo 
"";
 }else {
 
$enlace $dir.$archivo;

 echo 
"<ul><li>";
 echo 
"<a href=$enlace>$archivo<br></a>";

 echo 
"</li></ul>";

 }
 }
closedir($directorio);
?>

Última edición por lugano; 24/07/2006 a las 17:10
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 02:46.