Liste de dossier en ordre avec readdir

Résolu
Xella60 Messages postés 69 Statut Membre -  
Defouille Messages postés 404 Statut Membre -
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. Defouille Messages postés 404 Statut Membre 54
     
    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
  2. Xella60 Messages postés 69 Statut Membre 3
     
    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. Xella60 Messages postés 69 Statut Membre 3
       
      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
  3. Xella60 Messages postés 69 Statut Membre 3
     
    J'allais oublier, merci beaucoup pour ton aide =)
    0
    1. Defouille Messages postés 404 Statut Membre 54
       
      Avec plaisir ^^
      0