Tableau de fichiers [Résolu]

Signaler
Messages postés
86
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
19 juin 2009
-
Messages postés
86
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
19 juin 2009
-
Bonjour a tous,
Voila alors j'ai un petit souci en PHP et n'étant pas encore très doué je fais appel à vos talents.
Mon problème est que sur une de mes pages de mon site, j'affiche le contenu de tous les fichiers d'un répertoire. Mais ces fichiers s'affcihe par ordre alphabétique et non pas par ordre de date de création comme je le souhaite...Je sais qu'il fat faire un tableau pour trier les fichiers mais le prblème est que je n'y arrive vraiment pas ...
voici ma fonction qui me permet de parcourir le dossier et de connaitre les fichiers contenu:
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);
}

Jespere que vous pourrez m'aider... Merci

21 réponses

Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
Lu,

http://www.phpcs.com/infomsg_AFFICHAGE-FICHIERS-DATE_1151538.aspx ???

Le code que l'on à fait ne convient pas ??

<hr />Si ma reponse te convient, merci de l'accepter ! 
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
L'ordre ? Tu veux dire c'est du plus vieux au plus recent, ou du plus recent au plus vieux ?
Sinon, tu faits un :
$result = array_reverse($result);
qui va tout retourner ^^
<hr />Si ma reponse te convient, merci de l'accepter ! 
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
Oh l'idiot que je suis ^^ (L'array est de la forme [fichier] = > [time])

Sinon, c'est plus simple avec le numeros des lignes ;)

$resultat = ExploreDirWithTime ($ dir, true, true, true);
$resultat = array_reverse($resultat);

//$TailleTab = count($resultat);
// plus obligatoire avec un foreach (regarde la doc ;)), seulement sit u veux afficher le nombre de fichier

foreach( $resultat as $editTime
{
    if( !is_dir($resultat[$i]))
    {
        /* Debut du script d'affichage du contenu du fichier */
        $fichier = file($file); // Nom du fichier à afficher
        // Pas la peine de faire "$var", un simple $var suffit
        $total = count($fichier); // Nombre total des lignes du fichier
           
       
        echo '
   
        ----

            # |
            <gras>Fichier : ', $file, ' (', $total, ' lignes ; dernière édition le ', date('d/m/Y H:i:s', $editTime), ')
|
        ';
       
        // Départ de la boucle
        // Ici aussi, tu peux mettre une boucle foreach
        foreach( $fichier as $line => $text )
            echo '
        ----

            ', $line, ',
            ', $text, ',
        ';
            // On affiche ligne par ligne le contenu du fichier
        }
        echo '
   
';
       
        // Fin de la boucle
        /* Fin du script d'affichage du contenu du fichier */
    }
}
Après, je vois aps d'autres erreurs !
<hr />Si ma reponse te convient, merci de l'accepter ! 
Messages postés
86
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
19 juin 2009

Salut..

Ben en fait non,ca ne marche pas!! Ca ma fait une fausse joie!!

je viens de tester ça:
function cmp($a,$b) {
    if ($a[1] == $b[1])
        return 0;
    return ($a[1] < $b[1]) ? -1 : 1;
}

 usort($ListeRep, "cmp");

Ca ma changer l'ordre mais c'est toujours pas le bon ... Saurais-tu m'expliquer le plus simplement possible comment mettre tous les fichiers dans un tableau et les trier en fonction de leur date ensuite ? STP..
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
Re,

as tu essayé avec mon script ? (je l'ai testé, il marche)

Sinon, le principe c'est d'explorer ton dossier.
Tu récupère donc les fichiers. Mais tu dois utiliser la fonction filemtime() pour connaitre leur date d'édition. Donc on crée un Array() avec comme nom le fichier et comme valeur la date de modification (pas l'inverse car plusieurs fichiers peuvent être édités en même temps).
Ensuite, on trie le tableau en fonction de la valeur, c'est à dire avec la fonction asort() (ou autre)

<hr />Si ma reponse te convient, merci de l'accepter ! 
Messages postés
86
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
19 juin 2009

Oui ton script je l'ai bien testé...mais il y a un probleme. Je t'explique:
J'enregistre toutes mes pages de script de mon site dans un répertoire (ton script scan ce répertoire en fait), et dans ce répertoire, il y a un dossier avec des fichiers que je veux afficher selon leur date de création.
Ton script me scan pas le bon répertoire...
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
Mon script ne scan pas le bon repertoire ? Que veux tu dire ?

Il te suffit de changer le chemin normalement.

(sinon, je verrais tout à l'heure ;))

<hr />Si ma reponse te convient, merci de l'accepter ! 
Messages postés
86
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
19 juin 2009

Si si c'est bon excuse moi ça scan très bien..fausse manip'

En revanche l'ordre n'est toujours pas le bon :s
Messages postés
86
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
19 juin 2009

Oui voila ca me les met du plus vieux au plus récent..
et le array_reverse ne change rien ...
Messages postés
86
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
19 juin 2009

Rectification...
Encore une mauvaise manip'...Ca marche très bien!!

Désolé..je suis juste en 1ere année de BTS, je suis pas un pro encore lol

Je te remercie de ton temps...A bientot !!
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
^_______^

Peut être peux-tu accepté les bonnes réponses pour aider ceux qui auraient le même problème que toi ?

1er année BTS ? J'ai faillit y aller ^^ (Informatique & gestion)

<hr />Si ma reponse te convient, merci de l'accepter ! 
Messages postés
86
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
19 juin 2009

Ouais ben c'est ça que je fais.... -_-'

Bon allez je vais aller galérer a les afficher ces fichu fichiers...
Messages postés
86
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
19 juin 2009

Arf..je vais ravoir besoin d'aide... Tout à l'heure quand les fichiers n'étaient pas triés, et avec ma fonction ParcourRépertoire, ce code marchait pour l'affichage mais la avec ton scrpt je crois que ça ne s'adapte pas...

Mon script d'affichage
$resultat = ExploreDirWithTime('$dir, true, true, true);
$resultat = array_reverse($ resultat );

   $TailleTab = count($resultat);
 
   for($i= 0;$i<$TailleTab;$i++)
   {
      if(! is_dir($ resultat [$i]))
      {
            /* Debut du script d'affichage du contenu du fichier */
            $fichier = file("$resultat[$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
            /* Fin du script d'affichage du contenu du fichier */
      }
   }/* Fin de la boucle */

Tu peux encore m'aider sur ce coup là ?? lerreur renvoyer concerne tous ce qu'il y a en gras.
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
Voila le script légèrement amélioré ;) Je sais pas si il marche ^___^

Erreur : ExploreDirWithTime('$dir

$resultat = ExploreDirWithTime($dir, true, true, true);
$resultat = array_reverse($resultat);

//$TailleTab = count($resultat);
// plus obligatoire avec un foreach (regarde la doc ;)), seulement sit u veux afficher le nombre de fichier

foreach( $resultat as $file )
{
    if( !is_dir($resultat[$i]))
    {
        /* Debut du script d'affichage du contenu du fichier */
        $fichier = file($file); // Nom du fichier à afficher
        // Pas la peine de faire "$var", un simple $var suffit
        $total = count($fichier); // Nombre total des lignes du fichier
           
       
        echo '
   
        ----

            # |
            Fichier : ', $file, ' (', $total, ' lignes) |
        ';
       
        // Départ de la boucle
        // Ici aussi, tu peux mettre une boucle foreach
        foreach( $fichier as $line => $text )
            echo '
        ----

            ', $line, ',
            ', $text, ',
        ';
            // On affiche ligne par ligne le contenu du fichier
        }
        echo '
   
';
       
        // Fin de la boucle
        /* Fin du script d'affichage du contenu du fichier */
    }
}

<hr />Si ma reponse te convient, merci de l'accepter ! 
Messages postés
86
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
19 juin 2009

Alors je viens de tester ca...il y a tout plein de jolie erreur...en anglais -_-'
je te les montre:
Notice: Array to string conversion
Warning: file(1213280941): failed to open stream: No such file or directory
Warning: Invalid argument supplied for foreach()
Messages postés
86
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
19 juin 2009

Mais oui quel idiot franchement lol ^^

Bon alors ca marche, ca s'affiche...mais ya toujours cette petite erreur:
Notice: Array to string conversion

Sais-tu ce que c'est??
Messages postés
86
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
19 juin 2009

c'est bon j'a trouvé..un petit truc en rab qui servait plus a rien!!!

Je te remercie enormément pour ton aide si précieuse...
bonne continuation !!
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
Il n(y a pas de numero de ligne ? ou un text plus explicite ?

<hr />Si ma reponse te convient, merci de l'accepter ! 
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
Voilà, une erreur toute bête de }

$resultat = ExploreDirWithTime('./', true, true, true);
$resultat = array_reverse($resultat);

//$TailleTab = count($resultat);
// plus obligatoire avec un foreach (regarde la doc ;)), seulement sit u veux afficher le nombre de fichier

foreach( $resultat as $file => $editTime )
{
    if( !is_dir($resultat[$i]))
    {
        /* Debut du script d'affichage du contenu du fichier */
        $fichier = file($file); // Nom du fichier à afficher
        // Pas la peine de faire "$var", un simple $var suffit
        $total = count($fichier); // Nombre total des lignes du fichier
           
           
        echo '
            ----

            # |
            Fichier : ', $file, ' (', $total, ' lignes ; dernière édition le ', date('d/m/Y H:i:s', $editTime), ') |
        ';
           
        // Départ de la boucle
        // Ici aussi, tu peux mettre une boucle foreach
        foreach( $fichier as $line => $text )
        {
            echo '
        ----

            ', $line, ',
            ', htmlspecialchars($text), ',
        ';
            // On affiche ligne par ligne le contenu du fichier
        }
        echo '
   
';
           
        // Fin de la boucle
        /* Fin du script d'affichage du contenu du fichier */
    }
}

<hr />Si ma reponse te convient, merci de l'accepter ! 
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
Euh, fait gaffe, il y avait une erreur dans mon code précedent (celui avant que tu dise que ça marche)

Bon courage ;)

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