Liste de dossier en ordre avec readdir

Résolu/Fermé
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 - 14 juin 2010 à 14:11
Defouille Messages postés 388 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 15 novembre 2011 - 15 juin 2010 à 09:12
Bonjour,

Une page d'intranet sur lequel je travail affiche les sauvegardes de la base de donnée, je voudrais que les sauvegardes s'affichent de la plus récente à la plus ancienne.
Or, les dossiers s'affichent dans n'importe quel ordre...

Les sauvegardes s'enregistrent sous cette forme icsmDb_07-01-2010_15h16m18s.sql

Voici le code:

<?php
include('../init.php');
echo "<h1>Gestions des sauvegardes</h1>";
echo "<div id='contenu'>";
echo "<input type='button' value='Sauvegarder la base' onClick=goDump(); style='float:right;margin:7px;'/>";
echo "<div class='caseEntete' style='margin-top:5px;padding-bottom:15px;'>Liste des sauvegardes effectuées</div>";
$dir = opendir("dump/");
$cptColor=0;
while ($file = readdir($dir)) {
if ($file!=".." && $file!="."){
$f=explode("_",$file);
$h=explode(".",$f[2]);
$cptColor++;
echo "<div style='float:right;margin:5px;'>";
echo "<input type='button' value='Restaurer' onClick=goRestaure('sauvegardes/dump/$file'); />";
echo "<input type='button' value='X' onClick=goDelSauv('sauvegardes/dump/$file'); />";
echo "</div>";
echo "<div class='case".$cptColor."Spe' style='padding-bottom:10px;'>";
echo "<strong>$f[1] à $h[0]</strong><br/>";
echo ">> <a href='sauvegardes/dump/$file' target='_blank'>$file</a>";
echo "</div>";
if($cptColor>=2){
$cptColor=0;
}
}
}

echo "</div>";
?>



3 réponses

Defouille Messages postés 388 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 15 novembre 2011 54
14 juin 2010 à 15:58
Bonjour,

voila une solution, peut être pas la plus élégante ou la plus rapide mais je pense que ça peut te débloquer :

<?php
include('../init.php');
echo "<h1>Gestions des sauvegardes</h1>";
echo "<div id='contenu'>";
echo "<input type='button' value='Sauvegarder la base' onClick=goDump(); style='float:right;margin:7px;'/>";
echo "<div class='caseEntete' style='margin-top:5px;padding-bottom:15px;'>Liste des sauvegardes effectuées</div>";
$dir = opendir("dump/");
$cptColor=0;
// test ex : icsmDb_07-01-2010_15h16m18s.sql
// $t[] = "icsmDb_07-01-2010_16h16m18s.sql";
// $t[] = "icsmDb_06-01-2009_13h16m18s.sql";
// $t[] = "icsmDb_05-01-2010_15h16m18s.sql";
// $t[] = "icsmDb_05-01-2010_15h16m18s.sql";
$fichiers = array() ;
$temps_svg = array();
// test : foreach($t as $file)
while ($file = readdir($dir))
{
	if ($file!=".." && $file!=".")
	{
		$f=explode("_",$file);
		$h=explode(".",$f[2]);
		
		$d=explode("-",$f[1]);
		$date = $d[2]."-".$d[1]."-".$d[0] ;
		$heure = str_replace("h", ":", $h[0]);
		$heure = str_replace("m", ":", $heure);
		
		// On met dans un tableau le nom des fichiers avec en clé le timestamp
		$fichiers[strtotime($date." ".$heure)][] = $file;
		
	}
}

// On classe le tableau par clé (et donc par timestamp)
uksort($fichiers, "strnatcasecmp");

// On affiche le tableau
foreach($fichiers as $date => $fics)
{
	// Boucle supplémentaire au cas ou plusieurs sauvegardes aient la meme date
	foreach($fics as $file)
	{
		$cptColor++;
		echo "<div style='float:right;margin:5px;'>";
		echo "<input type='button' value='Restaurer' onClick=goRestaure('sauvegardes/dump/$file'); />";
		echo "<input type='button' value='X' onClick=goDelSauv('sauvegardes/dump/$file'); />";
		echo "</div>";
		echo "<div class='case".$cptColor."Spe' style='padding-bottom:10px;'>";
		echo "<strong>".date("Y-m-d h:m", $date)."</strong><br/>";
		echo ">> <a href='sauvegardes/dump/$file' target='_blank'>$file</a>";
		echo "</div>";
		if($cptColor>=2)
			$cptColor=0;
	}
}

echo "</div>";
?>
0
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 3
Modifié par Xella60 le 15/06/2010 à 07:57
Merci tu as bien résolu le problème de l'ordre mais voilà ce qui est affiché:

2010-06-15 07:06
>> icsmDb_15-06-2010_07h44m12s.sql

La sauvegarde a bien été faite a 07h44 mais l'affichage de l'heure au dessus ne correspond plus :s
0
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 3
Modifié par Xella60 le 15/06/2010 à 08:23
je viens de comprendre d'où viens ce problème d'heure

date("Y-m-d h:m", $date) J'ai remplacé par date("d-m-Y H:i:s", $date) et tout est Ok!!!

J'ai également ajouté la ligne $heure = str_replace("s"," ", $heure);
0
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 3
15 juin 2010 à 08:34
J'allais oublier, merci beaucoup pour ton aide =)
0
Defouille Messages postés 388 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 15 novembre 2011 54
15 juin 2010 à 09:12
Avec plaisir ^^
0