IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

trie fichier après lecture d'un dossier avec readDir


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2010
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2010
    Messages : 105
    Par défaut trie fichier après lecture d'un dossier avec readDir
    Bonjour,

    je lis le contenu d'un dossier via readDir puis je met les infos dans un tableau que j'affiche par l'intermédiaire de Smarty.

    Tout les fichier sont des pdf, ont comme nom ca + un numéro qui se compose de la date aaaammjj exemple (ca20121117).

    En local tout fonctionne correctement, mon affichage est trié et les dossier sont affiché par date du plus recente au plus ancien.
    Quand je met en ligne les dossiers sont mélangés et n'apparaissent plus par date pourtant ce sont les mêmes fichiers que j'ai uploder sur le site.
    Quelqu'un aurait il une idée.
    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    $dir = openDir($dossier);
     
    	$i='0';
    	while ($file = readDir($dir)) {
    		if (($file!=".")&&($file!="..")) {
    			$cheminComplet = $dossier."/".$file;				
    			$nom_fichier = substr($cheminComplet, -14,10);		
    			$intitule_fichier = substr($nom_fichier, -10,2);	
    			$annee_fichier = substr($nom_fichier, -8,4);		
    			$mois_fichier = substr($nom_fichier, -4,2);			
    			$jour_fichier = substr($nom_fichier, -2,2);			
    			$ahref = substr($cheminComplet, -29,29);		
    			$nom_affichage='Conseil d\'Administration du'.$jour_fichier .'-' .$mois_fichier .'-' .$annee_fichier;
    			$lien="<a href=$ahref>$nom_affichage</a>";
     
    			$tableau[$i]['annee_fichier']=$annee_fichier;
    			$tableau[$i]['mois_fichier']=$mois_fichier;
    			$tableau[$i]['jour_fichier']=$jour_fichier;
    			$tableau[$i]['nom_affichage']=$nom_affichage;
    			$tableau[$i]['lien']=$lien;	
    		}
    		$i++;
    	}
    	closeDir($dir);    						
    	$tableau = array_reverse($tableau); 	
    	$smarty->assign('tableau', $tableau);

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    le meilleur moyen d'être sûr du sens de tri c'est de s'en assurer soi-même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?php
     
    $tableau = array();
    $dates   = array();
    $paths   = array();
    $dir     = openDir($dossier);
     
    while($file = readDir($dir)) {
        if (($file !== '.') && ($file !== '..')) {
            $path    = $dossier.'/'.$file;
            $paths[] = $path;
            $dates[] = DateTime::createFromFormat('Ymd', substr($path, -12, 8));
        }
    }
    closeDir($dir);
     
    arsort($dates);   // tri desc sur les dates
     
    foreach($dates as $k => $date) {
        $affichage = "Conseil d'Administration du {$date->format('d-m-Y')}";
        $tableau[] = array(
                'annee_fichier' => $date->format('Y'),
                'mois_fichier'  => $date->format('m'),
                'jour_fichier'  => $date->format('d'),
                'nom_affichage' => $affichage,
                'lien'          => '<a href="'.substr($paths[$k], -29, 29).'">'.$affichage.'</a>'
            );
    }
     
    $smarty->assign('tableau', $tableau);
    ?>

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2010
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 144
    Par défaut
    J'imagine que les tests en local sont fait sur un Windows et que la machine de production est sous Linux ?

    Le tri des fichiers est fait de façon différente en fonction du système de fichier du serveur. Le plus simple serait de passer par des fonctions de tri des tableaux via PHP une fois la liste des fichiers récupérée.

    Documentation : http://php.net/manual/fr/array.sorting.php

  4. #4
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2010
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2010
    Messages : 105
    Par défaut
    merci pour vos réponses,
    j'ai essayé le scripte que tu me propose et j'ai un message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to undefined method DateTime::createfromformat() in C:\wamp\www\apeovh\test.php on line 68
    je pense que c'est du au fait que je suis en php 5.2.9 et je crois que cette fonction et utilisable àpartir de php 5.3.
    Si c'est bien ça je vais faire une mise à jour

  5. #5
    Membre éclairé Avatar de shell13010
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2008
    Messages : 281
    Par défaut
    Bonsoir,

    Pourquoi ne pas utiliser sort() ?

    Sa ne serait pas plus simple?

    Edit: J'avais pas vue que sa étais utilisé...

  6. #6
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2010
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2010
    Messages : 105
    Par défaut
    j'ai fais un test et avec rsort($tableau) le trie semble ok mais je craints que ce soit un peu du "hasard".
    J'ai un tableau à plusieurs dimension et je voudrait qu'il soit trié d'après le champs date et la le trie se fait sauf erreur de ma part suivant l'index.

  7. #7
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    rsort() perd au passage le lien entre les clés et les valeurs à la différence de arsort() qui les conserve.
    Un peu de lecture ici

    Et dans mon algo, rien n'est dû au hasard, prends le temps de le dépieuter.

    Si tu veux trier un tableau multi-dimensionnel tu disposes de array_multisort()

    Mon algo revient à faire équivalent à un array_multisort() sans la cuisine.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/11/2014, 10h16
  2. Lecture de fichier image dans un dossier avec java
    Par dreamnos dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 27/04/2008, 10h25
  3. Réponses: 1
    Dernier message: 18/07/2007, 18h44
  4. [VBA-E] créer un dossier avec un fichier résultat
    Par alex.a dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 24/04/2007, 16h43
  5. gestion des fichiers et dossiers avec FTP
    Par ahmeds dans le forum Réseau/Web
    Réponses: 3
    Dernier message: 12/10/2006, 13h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo