Liste de dossier en ordre avec readdir

Résolu
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

  1. 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
    1. 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
      1. 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
    2. J'allais oublier, merci beaucoup pour ton aide =)
      0
      1. Avec plaisir ^^
        0