Affichage des fichiers par date [Résolu]

ninho44 86 Messages postés vendredi 18 janvier 2008Date d'inscription 19 juin 2009 Dernière intervention - 11 juin 2008 à 12:16 - Dernière réponse : ninho44 86 Messages postés vendredi 18 janvier 2008Date d'inscription 19 juin 2009 Dernière intervention
- 11 juin 2008 à 17:30
Bonjour tout le monde,
Je suis débutant en PHP, et je suis en train de créer un site. Mon problême: Je fais un systeme de news qui affiche sur ma page le contenu des fichiers stockés dans un dossier. Tout s'affiche correctement sauf que les fichiers s'affiche par ordre alphabétique, et moi je voudrais qu'il s'affiche en fonction de leur date de création, c'est a dire du plus récent au plus ancien...

voici mon bout de code:
function ParcourRepertoire($Chemin, $ProfondeurMax -1 , $Mode "TOUT", $P = 0)
{
   if(substr($Chemin, strlen($Chemin) - 1) != '/')
      $Chemin .= '/';
   $ListeRep = array();
   if($Mode != "FICHIERS")
      $ListeRep[] = $Chemin;
   if($handle = opendir($Chemin))
   {       while(false !($Fichier readdir($handle)))
       {
           if($Fichier != '.' && $Fichier != '..')
           {
               $Fichier = $Chemin . $Fichier;
               if(! is_dir($Fichier))
               {
                  if($Mode != "REPERTOIRES")
                     $ListeRep[] = $Fichier;
               }
               elseif($P >=0 && ($P < $ProfondeurMax || $ProfondeurMax < 0))
               {
                   $result = ParcourRepertoire($Fichier . '/', $ProfondeurMax, $Mode, $P + 1);
                   $ListeRep = array_merge($ListeRep, $result);
               }
           }
       }
       closedir($handle);
   }
   if($P == 0 )
      natcasesort($ListeRep);
   return($ListeRep);
}

/* DEBUT DU SCRIPT */

   $ListeResult = ParcourRepertoire('\dossier.');
   $TailleTab = count($ListeResult);
  
   for($i=0;$i<$TailleTab;$i++)
   {
      if(! is_dir($ListeResult[$i]))
      {
 
            /* Debut du script d'affichage du contenu du fichier */
            $fichier = file("$ListeResult[$i]"); // Nom du fichier à afficher
            $total = count($fichier); // Nombre total des lignes du fichier
       
                for($j = 0; $j < $total; $j++)
                    { // Départ de la boucle
                        echo ('                                 ----

                                '.$fichier[$j].',
                               
                               
'); // On affiche ligne par ligne le contenu du fichier
                    } // Fin de la boucle
                echo ('
----------------------------------------------------------------------------
');
            /* Fin du script d'affichage du contenu du fichier*/
      }
   }/* Fin de la boucle */

J'espere que j'ai été assez clair, et que mon code n'est pas trop brouillon.

Merci d'avance pour votre aide !!!
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
JoJo738 1267 Messages postés mercredi 7 juillet 2004Date d'inscription 29 juin 2010 Dernière intervention - 11 juin 2008 à 17:25
3
Merci
^^

Euh ... il n'y a pas de usort() dans mon code ... sinon, pour le code de malalam ... En fait, l'erreur provient du fait que $Dir n'est pas un array()

Sinon, c'est peut-être dû au fait que scandir renvoie FALSE en cas d'échec ...

if( ($aDir = scandir('.')) )
{
    usort((array) $aDir, 'sortByMtime');
}
else
{
    echo 'Erreur !';
}

<hr />Si ma reponse te convient, merci de l'accepter ! 

Merci JoJo738 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de JoJo738
MasterCent 83 Messages postés jeudi 22 septembre 2005Date d'inscription 14 décembre 2011 Dernière intervention - 11 juin 2008 à 13:24
0
Merci
Salut,

Peut-être une idée serait de créer un tableau dans lequel tu mets les noms de fichier et leur date,

Puis, tu demandes que ton tableau soit trié par date. ( attention au format de tes dates )
une fonction sort() ou array_multisort() devrait faire l'affaire.
http://fr.php.net/manual/fr/function.array-multisort.php

Enfin, tu parcours ton tableau pour reccupérer le noms de tes fichiers, que tu pourras alors traiter.

m100

NB :

Attention, il existe peut-être des solutions plus éfficaces au niveau du parcours d'un dossier ?
Commenter la réponse de MasterCent
Iriven 75 Messages postés samedi 23 juin 2007Date d'inscription 3 février 2014 Dernière intervention - 11 juin 2008 à 13:37
0
Merci
SALUT.
je pense une solution à ton probleme consiste à creer une table mysql pour stocker les noms des differents fichiers et leur date de creation.
puis pour l'affichage de faire une requete sur la table qui les affiche du plus recent au plus ancien.


http://www.bbsecurit.com
Tout mal qui ne nous tue pas nous rend plus fort.NIETSCHES
Commenter la réponse de Iriven
ninho44 86 Messages postés vendredi 18 janvier 2008Date d'inscription 19 juin 2009 Dernière intervention - 11 juin 2008 à 14:11
0
Merci
Euh non je ne peux pas le transfomer de façon a le mettre ds la base de données...mon supérieur ne veut pas :s  En revanche jai essayer avec sort() mais ca marche pas...peut etre je m'y prend mal...Ce serait possible de voir se que ca donnerait avec mon code ?
Commenter la réponse de ninho44
MasterCent 83 Messages postés jeudi 22 septembre 2005Date d'inscription 14 décembre 2011 Dernière intervention - 11 juin 2008 à 14:38
0
Merci
Sur base de ton code ( l'interieur de la fonction ParcoursRepertoire , sans la récursivité),
je construit le tableau $result. sur base   $result[nom] => date ;
Ensuite, la fonction asort( $result ) à pour effet de trier le tableau sur base des valeurs.

Voilà.

<?PHP

    // lecture du nom des fichiers du dossiers
    $Chemin = "." ;
    $result =  Array() ;
    
    if($handle = opendir($Chemin))
    {       while(false !($Fichier readdir($handle)))
       {
           if($Fichier != '.' && $Fichier != '..')
           {
               /// $Fichier = $Chemin . $Fichier;
               if(! is_dir($Fichier))
               {
                  if($Mode != "REPERTOIRES")
                    /// $ListeRep[] = $Fichier;

                    // construction du tableau
                    $result [ $Fichier ] = filemtime ( $Fichier ) ;

                    
               }
               elseif($P >=0 && ($P < $ProfondeurMax || $ProfondeurMax < 0))
               {
                   /// $result = ParcourRepertoire($Fichier . '/', $ProfondeurMax, $Mode, $P + 1);
                   /// $ListeRep = array_merge($ListeRep, $result);
               }
           }
       }
       closedir($handle);
    }

    print_r ( $result ) ;
   
    // tri par valeurs
    asort ( $result ) ;

    print_r ( $result ) ;

?>
Commenter la réponse de MasterCent
ninho44 86 Messages postés vendredi 18 janvier 2008Date d'inscription 19 juin 2009 Dernière intervention - 11 juin 2008 à 15:04
0
Merci
Ok merci de ton coup de main...c'est un peu ce que j'avais fais!!
Mais la il me renvoi ce message d'erreur:
Warning: asort() expects parameter 1 to be array, null given

il n'aime pas asort je crois lol. Et il me dit aussi que filemtime n'est pas définit...je comprend plus rien !!!

C'est cool le PHP...mais seulement quand ça fonctionne !!!
Commenter la réponse de ninho44
MasterCent 83 Messages postés jeudi 22 septembre 2005Date d'inscription 14 décembre 2011 Dernière intervention - 11 juin 2008 à 15:26
0
Merci
Pas de quoi pour le coup de main,

asort () :
- as tu testé l'argument donné à asort par un print_r ( ) ?  Afin d'être certain qu'il s'agit d'un tableau ?

filemtime () :
- as tu affiché la valeur de $Fichier (chemin compris ) // perso, j'ai eu un souci à ce niveau là, lors de l'utilisation de 



filemtime ()

...
Commenter la réponse de MasterCent
ninho44 86 Messages postés vendredi 18 janvier 2008Date d'inscription 19 juin 2009 Dernière intervention - 11 juin 2008 à 15:33
0
Merci
Bon ben la du coup je n'ai plus rien qui s'affiche...

Alors pour le filemtime c'est réglé...Par contre il a toujours du mal avec le asort()

J'ai fais comme tu m'a dit, donc j'ai fait print_r ($result); avant le asort(), et la le tableau ne s'affiche pas...pourtant le $result n'est pas vide....
Je comprend plus rien !!!
Commenter la réponse de ninho44
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 11 juin 2008 à 15:41
0
Merci
Hello,

il y a des paramètres que tu n'as pas dans le code proposé, tu ne rentres jamais dans le if().

Sinon :

<?php
function sortByMTime($a, $b) {
$aTime = filemtime($a);
$bTime = filemtime($b);
if($aTime === $bTime) {
return 0;
} elseif($aTime < $bTime) {
return 1;
} else {
return -1;
}
}

$aDir = scandir('.');
usort($aDir, 'sortByMtime');
print_r($aDir);
?>


A moduler selon le contexte (chemin différent, récursivité, etc). Mais tu as là un principe utilisable.
Commenter la réponse de malalam
ninho44 86 Messages postés vendredi 18 janvier 2008Date d'inscription 19 juin 2009 Dernière intervention - 11 juin 2008 à 15:53
0
Merci
Alors j'ai bien compris le principe, sauf que ca bug toujours au niveau du asort()...
Warning: usort(): The argument should be an array

Et il ne veut pas m'afficher ce fichu tableau...
Commenter la réponse de ninho44
JoJo738 1267 Messages postés mercredi 7 juillet 2004Date d'inscription 29 juin 2010 Dernière intervention - 11 juin 2008 à 16:00
0
Merci
Hello

Voila une petite fonction que j'ai faite vite fait

<?php

if(!function_exists('scandir')) {

    // http://fr.php.net/scandir "Anders dot Jenbo at Pc dot DK"

    function scandir($dir, $sortorder = 0) {

        if(is_dir($dir) &amp;&amp; $dirlist = @opendir($dir)) {

            while(($file = readdir($dirlist)) !== false) {

                $files[] = $file;

            }

            closedir($dirlist);

            ($sortorder == 0) ? asort($files) : rsort($files); // arsort was replaced with rsort

            return $files;

        } else return false;

    }

}

function ExploreDirWithTime($dir, $asort = true, $recursive = true, $MultiArray = false)

{

    $return = array();

    if( !file_exists($dir) )

    {

    trigger_error('ExploreDirWithTime(' . $dir . ') : failed to open dir : Invalid directory', E_USER_WARNING);

        return false;

    }

    $files = scandir($dir);

    foreach( $files as $file )

    {

        if( in_array($file, array('.', '..')) )

        {

            continue;

        }

        $uri = $dir . DIRECTORY_SEPARATOR . $file;

        if( !is_dir($uri) )

        {

            if ( $recursive )

            {

                $return[$uri] = filemtime($uri);

            }

            else

            {

                $return[$file] = filemtime($uri);

            }

        }

        else if ( $recursive )

        {

            if( $MultiArray )

            {

                $return = array_merge($return, ExploreDirWithTime($uri, $asort, $recursive, $MultiArray));

            }

            else

            {

                $return[$file] = ExploreDirWithTime($uri, $asort, $recursive, $MultiArray);

            }

        }

    }

    asort($return);

    return $return;

}

$result = ExploreDirWithTime('.', true, true, true);

echo '';

print_r($result);

echo '

';

?>


Donc :
Fonction ExploreDirWithTime ($dir, [$asort = true, $recursive = true, $MultiArray = false])
$dir : le dossier
$asort : true/false appliquer ou non la fonction asort()
$recursive : true/false exploration des sous dossiers
$MultiArray : true/false > si true, array multidimentionnel, sinon, un seul array
<hr />Si ma reponse te convient, merci de l'accepter ! 
Commenter la réponse de JoJo738
ninho44 86 Messages postés vendredi 18 janvier 2008Date d'inscription 19 juin 2009 Dernière intervention - 11 juin 2008 à 16:59
0
Merci
Oui donc j'ai mis du temps à comprendre ton code (et oui je suis pas un pro... :s) et ça a l'air vraiment bien mais il me dit que la variable asort() n'est pas définit....
Mais quest-ce qu'il a mon tableau?? lol
Commenter la réponse de ninho44
JoJo738 1267 Messages postés mercredi 7 juillet 2004Date d'inscription 29 juin 2010 Dernière intervention - 11 juin 2008 à 17:07
0
Merci
^^
Hum :s

quel est l'erreur exacte renvoyé par ton serveur ?

<hr />Si ma reponse te convient, merci de l'accepter ! 
Commenter la réponse de JoJo738
ninho44 86 Messages postés vendredi 18 janvier 2008Date d'inscription 19 juin 2009 Dernière intervention - 11 juin 2008 à 17:09
0
Merci
Voila le joli petit message d'erreur:

Warning: usort(): The argument should be an array
Commenter la réponse de ninho44
ninho44 86 Messages postés vendredi 18 janvier 2008Date d'inscription 19 juin 2009 Dernière intervention - 11 juin 2008 à 17:30
0
Merci
Ah voila !! :D  Niquel ca marche

Merci beaucoup ...
Commenter la réponse de ninho44

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.