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

Langage PHP Discussion :

Aller chercher des infos dans plusieurs dossiers.


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 016
    Points : 308
    Points
    308
    Par défaut Aller chercher des infos dans plusieurs dossiers.
    Bonjour,

    J'utilise ce code pour afficher le texte de plusieurs petits fichiers textes qui sont dans un dossier.

    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
    <div id="madiv" class="vignette">
    		<?php
        $dir   = "../jdwphp2/jdwdates";
        $dh    = (opendir($dir));
        $files = array();
     
        while($file = readdir($dh)) {
            if (($file !== '.') && ($file !== '..') && ( ! is_dir($dirname.$file))) {
                $path         = $dir.DIRECTORY_SEPARATOR.$file;
                $files[$path] = file($path);
            }
        }
        closedir($dh);
        ksort($files);
        foreach($files as $path => $v) {
            echo
    <<<HTML
    <p>
    <img src="{$v[0]}" align=left hspace=12>
    <span style='text-align: left;font-size: 24px; line-height:30px;'>{$v[1]}</span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:22px;'>{$v[2]}</span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:22px;'>Réservation : <a href="{$v[3]}" target="_blank">Site internet - </a> <a href="{$v[4]}">Par e-mail </a>- Numéro de téléphone : {$v[5]}                                                                                                         </span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:1px;'>---------------------------------------------------------------------</p>
    
    
    HTML;
        }
    ?>
    Comme vous le voyez c'est classez par ordre alphabétique.

    --> Ma question : Est il possible d'allez chercher dans plusieurs répertoires différent et que l'ensemble soit classé tout de même ?

    Merci de votre aide.

  2. #2
    Membre actif
    Profil pro
    Responsable de service informatique
    Inscrit en
    Août 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 174
    Points : 232
    Points
    232
    Par défaut
    Bonsoir,

    Bien sûr. Tu peux mettre tes noms de dossier dans un tableau php par exemple puis avec une boucle sur ce tableau tu exécutes le même code que tu as écrit.

    Natso

  3. #3
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 016
    Points : 308
    Points
    308
    Par défaut
    Oui mais non parceque ce que je veux c'est que tous les fichiers de tous les dossiers soient "lus" puis qu'ils soient classés par ordre alphabétiques puis affichés.

    Donc si par exemple dans le dossier
    ../toto on a a.txt, g.txt et x.txt.

    dans
    ../titu on a f.txt et q.txt.

    et dans
    ../tata on à h.txt et l.txt.

    Comme résultat je veux que les contennus s'affichent dans l'ordre :

    a.txt
    f.txt
    g.txt
    h.txt
    l.txt
    q.txt
    x.txt


    ... Voila l'histoire :-)

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Comme mlebeguec je ne vois pas ce qui peut t'empêcher de mettre tous tes fichiers (des différents répertoires) dans un tableau puis de les trier puis de les afficher.

  5. #5
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 016
    Points : 308
    Points
    308
    Par défaut
    En fait tous mes essais donnent la même chose.

    J'ai mon répertoire 1 classé de A à Z.
    puis mon répertoire 2 classé de A à Z.
    puis mon répertoire 3 etc...

    Moi ce que je veux faire c'est que tous les répertoires soient "mixés" pour être classé dans une seule liste de A à Z...

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    si tout simplement dans les key du array tu simplifie la chose ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //$path         = $dir.DIRECTORY_SEPARATOR.$file;
    //            $files[$path] = file($path);
     $key         =  $file;
                 $files[$key] = file($path);
    Conception / Dev

  7. #7
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 101
    Points : 4 446
    Points
    4 446
    Par défaut
    Si tu as 12 dossiers, pour les 12 tu mets tes fichiers dans le même tableau $files[$path].

    et en cas de doublons, ou d'un tri uniquement sur nom $file (et pas $path) tu sauvegardes tes fichiers de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $files[$path]= array($file=>file($path));
    // utilise alors une fonction perso pour trier : ($a[0]<>$b[0])
    uksort(...);
    $moi= ( !== ) ? : ;

  8. #8
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 016
    Points : 308
    Points
    308
    Par défaut
    Vu que je ne comprenais pas bien vos code je l'ai recopié bêtement pour voir ce que ça fait. J'ai fait ceci :

    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
    32
    33
    <div id="madiv" class="vignette">
    		<?php
        $dir   = "../jdwphp2/jdwdates";
        $dh    = (opendir($dir));
        $files = array();
     
        while($file = readdir($dh)) {
            if (($file !== '.') && ($file !== '..') && ( ! is_dir($dirname.$file))) {
                        $key         =  $file;
    						$files[$key] = file($path);
     
     
    		}
        }
        closedir($dh);
        ksort($files);
        foreach($files as $path => $v) {
            echo
    <<<HTML
    <p>
    <img src="{$v[0]}" align=left hspace=12>
    <span style='text-align: left;font-size: 24px; line-height:30px;'>{$v[1]}</span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:22px;'>{$v[2]}</span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:22px;'>Réservation : <a href="{$v[3]}" target="_blank">Site internet - </a> <a href="{$v[4]}">Par e-mail </a>- Numéro de téléphone : {$v[5]}                                                                                                         </span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:1px;'>---------------------------------------------------------------------</p>
    
    
    HTML;
        }
    ?>
    Ca me fait un message d'erreur :
    Warning: file() [function.file]: Filename cannot be empty in /homez.406/espaceimy/www/TEST_Imagiscene/agenda.php on line 41
    Répété plusieurs fois.

    Ce que je ne comprends pas c'est que déjà il faudrait que je puisse définir plusieurs noms de dossiers.
    Je défini normalement le nom du dossier qu'il faut lire avec cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dir   = "../jdwphp2/jdwdates";
    Mais là vu que je veux que plusieurs dossiers soient lus je ne sais pas trop comment faire pour que la valeur de $dir soit de ../jdwphp2/jdwdates puis de ../laura/lauradates puis de ../pablo/pablodates etc...

    Après j'ai bien compris que je dois mettre le contenu de ça dans un tableau. Je m'en fou des doublons puisque s'il y a deux trucs qui ont le même nom de fichier ils faut afficher le contenu des deux.

    Et de ce que j'ai compris c'est seulement quand mon tableau est rempli avec tous le contenu de tous les dossiers que je le trie et que je l'affiche.

    Donc je pense que la partie tri et affichage de mon code est bonne.
    La ou ça merde c'est la partie ou je rempli mon tableau.

    J'avais éssayé de faire une sorte de boucle qui éxécutait mon code plusieurs fois en changeant la valeur de $dir mais ça va pas parceque ce que j'obtiens c'est un classement du premier dossier, puis du second, puis du troisième...

    et moi ce que je veux c'est que le mix de tous les dossiers soit classé.

    Ce que je ne comprend vraiment pas dans les codes que vous proposez c'est que je ne vois pas ni ou ni comment on défini plusieurs noms de dossier... et ca c'est tout de même le point de départ du truc !

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    oui en effet , il fallais pas décommenter la ligne qui définie $path, mais ce qu'il y avait a comprendre, c'est moi je proposais de mettre le nom du fichier en $key..

    cela dit, prend celui ci , ca fonctionne

    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
    <?php
        $dir   = "arr/";
    	function scanDirFindFiles($dir)
    	{
    		$root = scandir($dir);
    		foreach($root as $value)
    		{
    			if($value === '.' || $value === '..') {continue;}
    			//if(is_file("$dir/$value")) {$result[]="$dir/$value";continue;}
    			if(is_file("$dir/$value")) {$result[]="$value";continue;}
    			foreach( scanDirFindFiles("$dir/$value") as $value)
    			{
    				$result[]=$value;
    			}
    		}
    		return $result;
    	}
     
    	$filesListes = scanDirFindFiles($dir) ;
    	sort($filesListes); 
    	print_r($filesListes);
    ?>
    Conception / Dev

  10. #10
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 016
    Points : 308
    Points
    308
    Par défaut
    Excuse moi mais je ne comprends pas comment ça pourrait fonctionner.
    Tu fais

    mais comme je te disais il y a plusieurs dossiers.
    Donc je devrais avoir un truc qui fait que $dir = différentes choses (dans mon cas =
    ../jdw2/jdwdates
    ../lalau/lalaudates
    ../megi/megidates
    ../koki/kokidates
    ../sosy/sosydates

    avec ton code à toi on va juste chercher les fichiers dans arr/ non ?

    En fait mon code de départ
    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
    2345678910111213141516171819202122232425262728293031 <div id="madiv" class="vignette">
    		<?php
        $dir   = "../jdwphp2/jdwdates";
        $dh    = (opendir($dir));
        $files = array();
     
        while($file = readdir($dh)) {
            if (($file !== '.') && ($file !== '..') && ( ! is_dir($dirname.$file))) {
                $path         = $dir.DIRECTORY_SEPARATOR.$file;
                $files[$path] = file($path);
            }
        }
        closedir($dh);
        ksort($files);
        foreach($files as $path => $v) {
            echo
    <<<HTML
    <p>
    <img src="{$v[0]}" align=left hspace=12>
    <span style='text-align: left;font-size: 24px; line-height:30px;'>{$v[1]}</span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:22px;'>{$v[2]}</span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:22px;'>Réservation : <a href="{$v[3]}" target="_blank">Site internet - </a> <a href="{$v[4]}">Par e-mail </a>- Numéro de téléphone : {$v[5]}                                                                                                         </span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:1px;'>---------------------------------------------------------------------</p>
     
     
    HTML;
        }
    ?>
    était pas mal je trouve ce que j'avais essayé c'est de le placé dans une boucle avec a chaque tout une valeur différente pour $dir.
    Evidemment ça ne marchait pas car tout le code tri compris s'exécutait avant de passer à la valeur suivante pour $dir.
    Du coup j'avais chaque dossier trié l'un en dessous de l'autre.
    Vu que ce que moi je veux faire c'est avoir tous les dossiers "mixés" en un résultat trié il faudrait que je donne à mon programme la structure suivante :

    Ouvre dossier 1
    rempli le tableau
    ouvre le dossier 2
    rempli le tableau
    ouvre le dossier 3
    rempli le tableau
    etc... jusqu'a ce que tous les dossiers de ma liste soient fait.

    ET PUIS SEULEMENT
    trie le tableau
    affiche le résultat.

    Le problème c'est que je n'arrive pas du tout à le faire !

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    si tu avais essayé?

    tu te serais rendu compte que c'est une fonction récursive, qui affiche tous les fichiers de tous les dossiers a partir de /dir de façon alphabétique....

    le résultat est celui que tu cherche, rien à modifier. tu obtiens un tableau de tous tes fichiers de tous tes répertoires sur x étages rangé par sort.

    moi je ne peu pas te donner plus que quelque chose qui fonctionne vraiment et qui correspond a ta demande.

    donc voila, merci a toi de prendre le temps d'essayer et de comprendre, sinon, tu va faire perdre du temps à tout le monde !!!
    Conception / Dev

  12. #12
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 016
    Points : 308
    Points
    308
    Par défaut
    Bon ok c'est moi qui ai du mal m'expliqué parceuqe ce n'est pas du tout ce que je veux faire.

    Explication détaillée, j'ai pour chacun de mes artistes un site comme celui ci : www.jeromedewarzee.com

    Si tu vas sur la page Calendrier tu verras une liste de dates de spectacles.
    Pour ne pas devoir gérer de manière fastidieuse ces dates j'ai créé un petit système qui me donne entière satisfaction.
    Dans un sous dossier du site (ici http://www.jeromedewarzee.eu/jdwdates/) je "jette" chaque fois que j'ai une nouvelle date un petit fichier texte qui porte comme nom celui de la date (aaaammjj pour que le classement se passe bien).
    Chaque fichier contient les infos sur la date en question.

    ./affiches/ht.jpg = affcihe a afficher en vignette
    Comedie Centrale - Charleroi = endroit ou se passera le spectacle
    du 06 Février au 16 Février 2014 = la date du spectacle
    http://www.comedie.cc/charleroi/ = le site de l'endroit
    mailto:info@comediecentrale.com = Le mail pour les réservations
    071/30.50.30 = le tel pour les réservations
    Actuellement mon code va lire ce dossier, trie les fichier par ordre alphabétique et donc en fait par ordre de date et les affiche (pas eux mais leur contenu).

    Tout ça se passe dans le domaine www.jeromedewarzee.com

    qui est en fait http://monherbergeur_monespace/jdwphp2

    et donc le dossier date est dans http://monherbergeur_monespace/jdwphp2/jdwdates.

    Pour un autre artiste ce sera un autre domaine qui correspondra à http://monherbergeur_monespace/laulau par exemple et donc les dates seront dans http://monherbergeur_monespace/laulau/jlaulaudates.

    Chaque site affichant ses dates et uniquement ses dates.

    Jusque là tout va bien !

    Seulement voila, je suis en train de faire le site de la production, ce site fait la promo de tous les artistes que je produis et sur ce site qui sera dans
    http://monherbergeur_monespace/imsce je veux afficher un agenda reprenant toutes les dates de tous les artistes.

    Il n'est pas difficile pour moi d'allez lire les dates dans jdwphp2 par exemple, il suffit que je mette comme nom de répertoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dir   = "../jdwphp2/jdwdates";
    Je sors donc de mon dossier http://monherbergeur_monespace/imsce avec les ..
    Puis je vais dans http://monherbergeur_monespace/jdwphp2/jdwdates, là le code lit les fichier de ce dossier et affiche leur contenu comme il doit le faire.

    Je ne veux donc absolument pas lister des fichier ou des dossiers mais faire en sorte que dans des répertoires que je spécifie ET UNIQUEMENT ceux que je spécifie les fichiers soient classés et puis QUE LEUR CONTENU soit affiché.

    Ou alors je n'ai vraiment pas compris un truc ou ce n'est pas du tout ce que le code que tu propose fait ?
    Ce qui me rends dinguie c'est que je sais qu'il n'y a pas grand chose à changer dans mon code mais je ne trouve pas quoi !!!!

  13. #13
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    mais faire en sorte que dans des répertoires que je spécifie ET UNIQUEMENT ceux que je spécifie
    bon moi abandonnes... je te donnes un script qui fonctionne , tu évolue le script, fin bon...

    Ou alors je n'ai vraiment pas compris un truc


    bon courage a toi
    Conception / Dev

  14. #14
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 016
    Points : 308
    Points
    308
    Par défaut
    Si j'insiste c'est parceque ça ne marche PAS !

    J'ai docilement recopié ton code dans ma page dont voici l'intégralité :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    <!DOCTYPE html>
    <!-- tag intro et co --> <?php include("./introdoc.php"); ?>
    </head>
    <body>
    <!-- On met dans repfb le chemin de cette page-->
    <?php
    $repfb=$_SERVER['PHP_SELF'];
    ?>
    <!-- FINI -->
    <div id="art-main">
     
    <!-- affiche header     --> <?php include("./header.php"); ?>
    <!-- affiche navigation --> <?php include("./navig.php"); ?>
     
    <div class="art-sheet clearfix">
                <div class="art-layout-wrapper clearfix">
                    <div class="art-content-layout">
                        <div class="art-content-layout-row">
                            <div class="art-layout-cell art-content clearfix"><article class="art-post art-article">
                                    <div class="art-postmetadataheader">
                                            <h2 class="art-postheader">Agenda de nos artistes</h2>
                                        </div>
     
                    <div class="art-postcontent art-postcontent-0 clearfix"><p>Attention il est possible que toutes les dates ne figurent pas sur cet agenda.</p></div>
     
                    </article><div class="art-content-layout layout-item-1">
            <div class="art-blockcontent"><p>
     
    <!-- DEBUT ROUTINE AFFICHAGE DES DATES     -->		
    <div id="madiv" class="vignette">
    <?php
        $dir   = "arr/";
    	function scanDirFindFiles($dir)
    	{
    		$root = scandir($dir);
    		foreach($root as $value)
    		{
    			if($value === '.' || $value === '..') {continue;}
    			//if(is_file("$dir/$value")) {$result[]="$dir/$value";continue;}
    			if(is_file("$dir/$value")) {$result[]="$value";continue;}
    			foreach( scanDirFindFiles("$dir/$value") as $value)
    			{
    				$result[]=$value;
    			}
    		}
    		return $result;
    	}
     
    	$filesListes = scanDirFindFiles($dir) ;
    	sort($filesListes); 
    	print_r($filesListes);
    ?> 
    	<!--fin lecture des dates prochaines-->	
     
     
    </div>
    	</p></div>
    </div></div>
                        </div>
                    </div>
                </div>
        </div>
    	</div>
    <footer class="art-footer clearfix">
    <!-- affiche footer --> <?php include("./footer.php"); ?>	
    </footer>
     
    </div>
     
     
    </body></html>
    Vu que je ne comprends pas ce code difficile de trouver pourquoi ça ne marche pas --> L'utilité de trouver ici des réponse pour comprendre et pa seulement des solutions à recopier "bêtement".

    Le première chose que je ne comprends pas c'est ce

    J'ai toujours cru que la valeur dans $dir est le dossier cible.
    A quoi ferait référence de "arr/" ?
    de toute évidence à rien puisque je n'obtiens que ce message d'erreur :
    Warning: scandir(arr/) [function.scandir]: failed to open dir: No such file or directory in /homez.406/espaceimy/www/TEST_Imagiscene/agenda.php on line 35

    Warning: scandir() [function.scandir]: (errno 2): No such file or directory in /homez.406/espaceimy/www/TEST_Imagiscene/agenda.php on line 35

    Warning: Invalid argument supplied for foreach() in /homez.406/espaceimy/www/TEST_Imagiscene/agenda.php on line 36

    Warning: sort() expects parameter 1 to be array, null given in /homez.406/espaceimy/www/TEST_Imagiscene/agenda.php on line 50
    Donc comme je le pensais ça ne marche pas !
    J'ai essayé pour voir de mettre un chemin valide vers un dossier, j'ai donc mis à la place de "arr/", "../jdwphp2/jdwdates".
    Et la j'obtiens la liste des fichiers qu'il y a dans le dossier "../jdwphp2/jdwdates".
    Ce n'est pas non plus ce que je veux mais au moins ce n'est pas une erreur.

    Donc désolé ton code ne fonctionne pas du tout ou dans le meilleur des cas pas pour faire ce que je souhaites faire.
    Et donc en conclusion pour reprendre ce que tu disais :

    si tu avais essayé? tu te serais rendu compte que c'est une fonction récursive, qui affiche tous les fichiers de tous les dossiers a partir de /dir de façon alphabétique....
    Ben comme quoi j'avais peut être mieux compris ce code que je ne le croyais puisque sans essayer je voyais bien que ça ne fonctionnerait pas.

    et en particulier sur :

    c'est une fonction récursive, qui affiche tous les fichiers de tous les dossiers a partir de /dir de façon alphabétique....
    C'est surement très intéressant MAIS PAS DU TOUT CE QUE JE VEUX FAIRE !
    Je veux afficher LE CONTENU des fichiers situés DANS CERTAINS dossiers que je choisis arbitrairement.
    Donc en fait exactement ce que faisait mon code de départ mais au lieu que ce soit sur un seul dossier que ce soit sur une liste de 3 ou 4 dossiers.


    le résultat est celui que tu cherche, rien à modifier. tu obtiens un tableau de tous tes fichiers de tous tes répertoires sur x étages rangé par sort.
    Si tu pouvais me dire ou tu as vu que c'est ce que je voulais faire ?...

    moi je ne peu pas te donner plus que quelque chose qui fonctionne vraiment et qui correspond a ta demande.
    Ca ne fonctionne pas et ça ne réponds pas à ma demande.

    donc voila, merci a toi de prendre le temps d'essayer et de comprendre, sinon, tu va faire perdre du temps à tout le monde !!!
    Je pense que la plus grande perte de temps vient su fait que tu ne lis pas mes messages.
    Engueuler les gens parcequ'on leur file un tournevis pour serrer un écrou et qu'ils n'y arrivent pas n'est probablement pas la bonne méthode...

    Quoi qu'il en soit merci d'avoir perdu ton temp avec le débille que je suis.
    Je vais faire un copy/paste d'une petite animation en flash d'un martien qui butte des aliens. Ce sera aussi proche de ce que je veux faire que ce que tu propose mais ça au moins ce sera marrant !

  15. #15
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    Ma question : Est il possible d'allez chercher dans plusieurs répertoires différent et que l'ensemble soit classé tout de même ?


    Vu que ce que moi je veux faire c'est avoir tous les dossiers "mixés" en un résultat trié il faudrait que je donne à mon programme la structure suivante :
    Ouvre dossier 1
    rempli le tableau
    ouvre le dossier 2
    rempli le tableau
    ouvre le dossier 3
    rempli le tableau
    etc... jusqu'a ce que tous les dossiers de ma liste soient fait.

    ET PUIS SEULEMENT
    trie le tableau
    affiche le résultat.

    ce que fais la fonction récursive a partir de $dir...

    "arr/" fait référence à ton point de départ... fin ca parait assez logique, moi j'ai tésté et n'ai pas la même la même arbo que toi, donc j'avais un dossier nommé "arr/", et j'ai scanné l'enssemble des fichiers des dossiers contenu dedans, puis ordonné de façon alphabétique. cela fonctionne...


    C'est surement très intéressant MAIS PAS DU TOUT CE QUE JE VEUX FAIRE !
    Je veux afficher LE CONTENU des fichiers situés DANS CERTAINS dossiers que je choisis arbitrairement.
    j'ai beau relire tes messages avant ma seconde réponse, je t'assure que tu à aucun moment je n'ai vu présenté ta question dans ce sens, ni pour le choix "des répertoires" de départ, ni pour récupérer le contenu des fichiers...

    voila, peu être moi qui ait mal compris....


    donc pour le choix "des répertoires" de départ, suffis de boucler et de faire un array_merge, pour le contenu j'ai ajouter la possibilité de ne scanner que les fichier comportant une certaine extension....


    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    <?php
     
     
     
     
    	function scanDirFindFiles($dir)
    	{
    		$root = scandir($dir);
     
    		foreach($root as $value)
    		{
    			if($value === '.' || $value === '..') {continue;}
    			//if(is_file("$dir/$value")) {$result[]="$dir/$value";continue;}
    			if(is_file("$dir/$value")) {
    				//$path_parts = pathinfo("$dir/$value"); // SI TU VEUX SCANNER UIQUEMENT LES EXTENSION html PAR EXEMPLE
    				//if($path_parts['extension']=='html'){/ SI TU VEUX SCANNER UIQUEMENT LES EXTENSION html PAR EXEMPLE
    				$result[]=array("$value","$dir/$value");
    				//}/ SI TU VEUX SCANNER UIQUEMENT LES EXTENSION html PAR EXEMPLE
    				continue;
    			}
    			foreach( scanDirFindFiles("$dir/$value") as $value)
    			{
    				$result[]=$value;
    			}
    		}
    		return $result;
    	}
     
    	$globliste = array("arr/aaaa/b","arr/aaaa/c"); //liste des path dont on veux extraire les fichiers
    	$sortie= array();
    	for ($i = 0 ; $i< count($globliste ); $i++ ){
    		$dir = $globliste[$i];  
    		$sortie= array_merge($sortie,scanDirFindFiles($dir));
    	} 
    	sort($sortie); 
    	print_r($sortie); 
     
    	for ($i = 0 ; $i< count($sortie); $i++ ){
    		echo $sortie[$i][0]; 
    		echo file_get_contents($sortie[$i][1]); 
     
    	}
    ?>
    Conception / Dev

  16. #16
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 016
    Points : 308
    Points
    308
    Par défaut
    Mon premier post disait :

    J'utilise ce code pour afficher le texte de plusieurs petits fichiers textes qui sont dans un dossier.
    et ensuite
    Comme vous le voyez c'est classez par ordre alphabétique.

    --> Ma question : Est il possible d'allez chercher dans plusieurs répertoires différent et que l'ensemble soit classé tout de même ?
    Je pense qu'on s'en rapproche mais ton code étant très différent de celui que j'utilise au départ j'ai du mal à me racrocher à quelque chose pour le comprendre. Car ce dernier code que tu m'as donné ne fonctionne pas.


    Si tu te rends ici http://espaceimy.cluster010.ovh.net/...ene/agenda.php tu verras ce que donne ton code avec un simple copy paste et juste en changeant les noms de dosseiers évidemment.

    Si tu vas ici : http://www.jeromedewarzee.eu/calendrier-2.php tu verras ce que donne mon code.

    Comme tu vois c'est assez différent, mon code va lire l'intérieur des fichiers textes et affiche le contenu d'une façon bien propre (c'est ce que fait la partie HTML de mon code qui est après le echo) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <<<HTML
    <p>
    <img src="{$v[0]}" align=left hspace=12>
    <span style='text-align: left;font-size: 24px; line-height:30px;'>{$v[1]}</span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:22px;'>{$v[2]}</span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:22px;'>Réservation : <a href="{$v[3]}" target="_blank">Site internet - </a> <a href="{$v[4]}">Par e-mail </a>- Numéro de téléphone : {$v[5]}                                                                                                         </span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:1px;'>---------------------------------------------------------------------</p>
     
     
    HTML;
    J'ai veinement essayé de réintégrer cette partie HTML dans ton code mais sans succès.
    En fait on en revient à mon problème de départ. Ok il faut boucler sur les différents noms de dossier à visiter mais c'est à ce moment que je me perds dans la syntaxe et que je ne sais plus ou mettre ce code HTML.

    Bon c'est quand on fait les echo que ça affiche non ?
    Donc en principe il suffirait que je supprime

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo $sortie[$i][0]; 
    echo file_get_contents($sortie[$i][1]);
    et que je les remplaces par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    echo
    <<<HTML
    <p>
    <img src="{$v[0]}" align=left hspace=12>
    <span style='text-align: left;font-size: 24px; line-height:30px;'>{$v[1]}</span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:22px;'>{$v[2]}</span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:22px;'>Réservation : <a href="{$v[3]}" target="_blank">Site internet - </a> <a href="{$v[4]}">Par e-mail </a>- Numéro de téléphone : {$v[5]}                                                                                                         </span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:1px;'>---------------------------------------------------------------------</p>
     
     
    HTML;
    Et ca devrait marcher non ? ET ben non !


    D'Autre part peux tu m'expliquer un peu pourquoi ton code est si différent du miens ? Vu que le mien fait bien ce qu'il doit sur un répertoire je le suis dit :
    Il suffit que je fasse la boucle sur le remplissage du tableau.
    Donc un boucle qui exécuterait plusieurs fois ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $dh    = (opendir($dir));
    while($file = readdir($dh)) {
            if (($file !== '.') && ($file !== '..') && ( ! is_dir($dirname.$file))) {
                $path         = $dir.DIRECTORY_SEPARATOR.$file;
                $files[$path] = file($path);
            }
        }
        closedir($dh);
    avec des noms de $dir différents.

    Puis ensuite je pouvais laisser le code tel quel :
    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
    ksort($files);
        foreach($files as $path => $v) {
            echo
    <<<HTML
    <p>
    <img src="{$v[0]}" align=left hspace=12>
    <span style='text-align: left;font-size: 24px; line-height:30px;'>{$v[1]}</span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:22px;'>{$v[2]}</span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:22px;'>Réservation : <a href="{$v[3]}" target="_blank">Site internet - </a> <a href="{$v[4]}">Par e-mail </a>- Numéro de téléphone : {$v[5]}                                                                                                         </span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:1px;'>---------------------------------------------------------------------</p>
     
     
    HTML;
        }
    Pour trier et afficher le résultat.

    Ca n'aurait pas marché ?
    La seule chose que je ne suis pas arrivé à faire c'est une boucle qui change à chaque fois la valeur de $dir.
    J'avais fait ceci :

    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
    32
    33
    34
    <div id="madiv" class="vignette">
    <?php
        $files = array(); //je fait le tableau
    	$listedir=array("../jdwphp2/jdwdates","../lauralaune/lauralaunedates"); //je met les nom des dossiers dedans.
    	for ($i = 0 ; $i< count($listedir ); $i++ ){ // je fais la boucle
    		$dir = $listedir[$i]; // a chaque tour on change le nom du dossier à lire
    							$dh    = (opendir($dir)); //on l'ouvre
    							while($file = readdir($dh)) { // tout le bazard pour traiter ou pas ce qu'il y a dans le dossier
    							if (($file !== '.') && ($file !== '..') && ( ! is_dir($dirname.$file))) {
    							$path         = $dir.DIRECTORY_SEPARATOR.$file;
    							$files[$path] = file($path);
            }
        }
    	closedir($dh); // on referme le dossier avant de passer au suivant.
    	}
    	// c'est la fin de la boucle qui donne les différents noms de fichier.
        ksort($files);   // On trie le résultat du scan de tous ces fichiers
        foreach($files as $path => $v) {// on fait l'affichage du contenu de tous ces fichiers en respectant leur ordre
            echo
    <<<HTML
    <p>
    <img src="{$v[0]}" align=left hspace=12>
    <span style='text-align: left;font-size: 24px; line-height:30px;'>{$v[1]}</span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:22px;'>{$v[2]}</span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:22px;'>Réservation : <a href="{$v[3]}" target="_blank">Site internet - </a> <a href="{$v[4]}">Par e-mail </a>- Numéro de téléphone : {$v[5]}                                                                                                         </span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:1px;'>---------------------------------------------------------------------</p>
    
    
    HTML;
        }
    ?>
    Et ici : http://espaceimy.cluster010.ovh.net/...ne/agenda2.php
    tu peux voir ce que ça donne cad un truc pas mal mais qui foire tout de même et c'est LA, pile LA que je ne pige pas pourquoi

    Quand je dis que ça foire tu auara remarqué que tout est bien classé mais par dossir, cad tous les fichiers du dossier ../jdwphp2/jdwdates en ordre ET PUIS tous les fichiers de ../lauralaune/lauralaunedates en ordre aussi et pas l'ensemble de tous les fichiers de tous le dossiers classés.

  17. #17
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    Bon c'est quand on fait les echo que ça affiche non ?
    Donc en principe il suffirait que je supprime

    echo $sortie[$i][0];
    echo file_get_contents($sortie[$i][1]);

    et que je les remplaces par


    echo
    <<<HTML
    <p>
    <img src="{$v[0]}" align=left hspace=12>
    <span style='text-align: left;font-size: 24px; line-height:30px;'>{$v[1]}</span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:22px;'>{$v[2]}</span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:22px;'>Réservation : <a href="{$v[3]}" target="_blank">Site internet - </a> <a href="{$v[4]}">Par e-mail </a>- Numéro de téléphone : {$v[5]} </span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:1px;'>---------------------------------------------------------------------</p>


    HTML;

    Et ca devrait marcher non ? ET ben non !

    et bien si a une toute petite petite modif prête

    http://php.net/manual/fr/function.file.php

    http://www.php.net/manual/fr/functio...t-contents.php

    je te conseil tout de même d'aller lire la doc de temps en temps

    file retourne le contenu d'un fichier dans un tableau , et file-get-contents dans une chaine de caractère

    dans ta modif la variable $v n'est plus définie.

    donc tres simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //echo $sortie[$i][0];
    //echo file_get_contents($sortie[$i][1]);
    $v =  file($sortie[$i][1]);
    Conception / Dev

  18. #18
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 016
    Points : 308
    Points
    308
    Par défaut
    En effet c'est juste ça.
    C'est vraiment ce genre de trucs à la con qui me bloque parfois.
    Ceci étant dit juste pour comprendre.
    Pourquoi mon code ne fonctionnait pas ?

    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
    32
    33
    34
    <?php
        $listedir = array();
    	$files = array(); //je fait le tableau
    	$listedir=array("../jdwphp2/jdwdates","../lauralaune/lauralaunedates"); //je met les nom des dossiers dedans.
    	for ($i = 0 ; $i< count($listedir ); $i++ ){ // je fais la boucle
    		$dir = $listedir[$i]; // a chaque tour on change le nom du dossier à lire
    							$dh    = (opendir($dir)); //on l'ouvre
    							while($file = readdir($dh)) { // tout le bazard pour traiter ou pas ce qu'il y a dans le dossier
    							if (($file !== '.') && ($file !== '..') && ( ! is_dir($dirname.$file))) {
    							$path         = $dir.DIRECTORY_SEPARATOR.$file;
    							$files[$path] = file($path);
            }
        }
    	closedir($dh); // on referme le dossier avant de passer au suivant.
    	}
    	// c'est la fin de la boucle qui donne les différents noms de fichier.
        ksort($files);   // On trie le résultat du scan de tous ces fichiers
        foreach($files as $path => $v) {// on fait l'affichage du contenu de tous ces fichiers en respectant leur ordre
            echo
    <<<HTML
    <p>
    <img src="{$v[0]}" align=left hspace=12>
    <span style='text-align: left;font-size: 24px; line-height:30px;'>{$v[1]}</span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:22px;'>{$v[2]}</span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:22px;'>Réservation : <a href="{$v[3]}" target="_blank">Site internet - </a> <a href="{$v[4]}">Par e-mail </a>- Numéro de téléphone : {$v[5]}                                                                                                         </span>
    </BR>
    <span style='text-align: left;font-size: 14px; line-height:1px;'>------------------------------------------------------------------------------------------------------------------------------------------</p>
    
    
    HTML;
        }
    ?>
    SI tu as un peu de temps pour m'expliquer ça serait cool

  19. #19
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    tout simplement car en fait tu n'ordonne non pas comme tu le dit "le nom des fichiers", mais le chemin des fichiers, ce qui à comme effet de trier d'abord par path puis par file.
    Conception / Dev

  20. #20
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 016
    Points : 308
    Points
    308
    Par défaut
    Ah ok.
    Je comprends.
    Finalement ce n'est même pas du php c'est de la logique

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

Discussions similaires

  1. Récuperer des infos dans plusieurs onglets via des codes
    Par jbggg dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/11/2009, 09h32
  2. Aller chercher des données dans un stringgrid
    Par cre3000 dans le forum Langage
    Réponses: 2
    Dernier message: 29/02/2008, 13h27
  3. [Lazarus] Chercher des infos dans Unit1
    Par load.exe dans le forum Lazarus
    Réponses: 4
    Dernier message: 06/02/2008, 16h31
  4. Comment aller chercher une info dans un fichier
    Par El-Diablo- dans le forum C++Builder
    Réponses: 15
    Dernier message: 06/05/2007, 16h39
  5. [MySQL] Chercher des info dans une DB, et les afficher en lien
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/10/2005, 19h29

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