begin process at 2012 05 31 16:02:09
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive PHP

 > 

Archives

 > 

Divers

 > 

Sous-répertoire non reconnu comme étant des répertoires


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Sous-répertoire non reconnu comme étant des répertoires

dimanche 26 février 2006 à 17:58:31 | Sous-répertoire non reconnu comme étant des répertoires

darkduck

Bonjour,

J'ulise la fonction suivante :

function recup_repertoires(&$liste_repertoires, $dir='./', $recursif=true, $inc=0)
{   
        $rep = opendir($dir);       
        while ($file = readdir($rep))
        {
            if($file != '..' && $file !='.' && $file !='')
            {
                if (is_dir($file))
                {   
                    $liste_inc = '';
                   
                    for($i=0; $i<$inc; $i++)                   
                        $liste_inc .= '---';
               
                    echo $liste_inc.substr($dir.$file,2).'<br />'; //Cette commande est juste un test pour avoir la liste des répertoires

                    array_push($liste_repertoires,$liste_inc.$file);                                   
                   
                    if ($recursif)
                        recup_repertoires($liste_repertoires, true, $dir.$file.'/', $inc+1);
                }               
            }
        }       

        closedir($rep);
        clearstatcache();
 }

Que j'appelle de la manière suivante :

$liste = array(); //Initialisation
recup_repertoires($liste);

Le problème c'est que mes sous-repertoire ne sont pas considérés comme des répertoires
Ex : "./documents/" sera affiché dans la liste mais "./documents/repertoire/" n'est pas affiché

Savez-vous pourquoi ?

Merci d'avance
dimanche 26 février 2006 à 19:08:48 | Re : Sous-répertoire non reconnu comme étant des répertoires

WhiteDwarf

Membre Club

Premièrement je nepense pas que l'on puisse directement dans l'intitulé de la fontcion enter une variable et directement donner sa valeur, ca ne marche pas comme ca...

tu devrai plutôt l'écrire comme ca :




<?php
function recup_repertoires($dir,$recursif)
{   
        $rep = opendir($dir);       
        while ($file = readdir($rep))
        {
            if($file != '..' && $file !='.' && $file !='')
            {

                if (is_dir($file))
                {   

                 
                  echo "<br>$recursif $file" ;
                  $recursif .= "---";
                  recup_repertoires($dir ."/". $file,$recursif);
                  $recursif = "";
                 }}
        }       

        closedir($rep);
        clearstatcache();
 }

recup_repertoires(".","");

?>



----------------------
La lumière étant plus rapide que le son, un homme peu paraître brillant avant qu'il se mette a parler
-----------------

lundi 27 février 2006 à 01:19:23 | Re : Sous-répertoire non reconnu comme étant des répertoires

darkduck

Premièrement je nepense pas que l'on puisse directement dans l'intitulé de la fontcion enter une variable et directement donner sa valeur, ca ne marche pas comme ca...

Si ça marche comme ça, qd on met une valeur dans l'intitulé de la fonction, ça permet de donner une valeur par défaut à la variable passée en paramettre ce qui fait que si on ne lui donne pas de valeur dans l'appel, elle prend la valeur "par défaut"

Ex :

Si j'appelle recup_repertoires(&$liste_repertoires)
$dir sera égal à './'
$récursif sera égal à true
$inc sera égal à 0


Alors que si j'appelle recup_repertoires(&$liste_repertoires, 'mon_repertoire/', false)
$dir sera égal à 'mon_repertoire/'
$récursif sera égal à false
$inc sera égal à 0

Espérant en avoir aidé plus d'un.....

...je n'ai cependant toujours pas la réponse à ma question (pourquoi is_dir($file) retourne false quand $file est un sous-repertoire alors que is_dir($file) retourne true, quand $file est un répertoire "simple" ?)
lundi 27 février 2006 à 11:24:27 | Re : Sous-répertoire non reconnu comme étant des répertoires

malalam

Administrateur CodeS-SourceS
Réponse acceptée !

Hello,

<?php
function recup_repertoires(&$liste_repertoires, $dir='.', $recursif=true)
{
        $rep = opendir($dir);
        while (false !== ($file = readdir($rep)))
        {
            if(!in_array ($file, array ('.', '..')))
            {
                if (is_dir($dir.'/'.$file))
                {
                    array_push($liste_repertoires,$dir.'/'.$file);

                    if ($recursif === true)
                        recup_repertoires($liste_repertoires, $dir.'/'.$file, true);
                }
            }
        }

        closedir($rep);
        clearstatcache();
 }

$liste = array(); //Initialisation
recup_repertoires($liste);
print_r ($liste);
?>

lundi 27 février 2006 à 11:45:46 | Re : Sous-répertoire non reconnu comme étant des répertoires

darkduck

Cool, merci ça marche très bien !!!! Chapeau !

J'ai juste optimiser un peu la fonction :

function recup_repertoires(&$liste_repertoires, $dir='.', $recursif=true)
    {
        $rep = opendir($dir);
        while ($file = readdir($rep))
        {
            if(!in_array ($file, array ('.', '..')))
            {
                if (is_dir($dir.'/'.$file))
                {
                    array_push($liste_repertoires,$dir.'/'.$file);

                    if ($recursif)
                        recup_repertoires($liste_repertoires, $dir.'/'.$file, true);
                }
            }
        }

        closedir($rep);
        clearstatcache();
     }

$liste = array(); //Initialisation
recup_repertoires($liste);
print_r ($liste);


J'ai remplacé :
    while (false !== ($file = readdir($rep)))
Par :
    while ($file = readdir($rep))

Et :
    if ($recursif === true)
Par :
    if ($recursif)

Raison : Etant donné que les tests sont fait sur des variables (ou méthodes) qui sont (ou retournent) des bouléens, ce n'est pas la peine de vérifier == $true (ou == $false) et != $true (ou != $false)

Merci encore !
lundi 27 février 2006 à 12:08:11 | Re : Sous-répertoire non reconnu comme étant des répertoires

malalam

Administrateur CodeS-SourceS
Réponse acceptée !
C'est de l'optimisation, ça ?
Lol, en l'occurence, ma version est plus rapide.
Et j'explique :

"J'ai remplacé :
    while (false !== ($file = readdir($rep)))
Par :
    while ($file = readdir($rep))
"
=> tu as grand tort ;-) Partce que si tu as un répertoire ou un fichier s'appellant '0', ta fonction, avec ta version, va s'aarrêter...'0' == false en php. Donc la condition de ton while ne sera plus remplie.
Mais, en php, '0' !== false (on teste sur le type).

Idem pour la 2ème réflexion :
"Et :
    if ($recursif === true)
Par :
    if ($recursif)"
"Raison : Etant donné que les tests sont fait sur des variables (ou méthodes) qui sont (ou retournent) des bouléens, ce n'est pas la peine de vérifier == $true (ou == $false) et != $true (ou != $false)"

Certes, sauf que lorsqu'on code, on essaye d'être strict : tu attends un booleen, true, ou false. Donc, tu testes que c'en est bien un. Et encore une fois, avec ton code, je peux passer 'bla' au lieu de true, ton code prendra ça comme un true. Ce qui est incorrect.
D'ailleurs, si tu avais testé le type correctement, tu te serais rendu compte, dans ta 1ère version, que ta fonction ne rentrait pas dans l'appel rtécursif : tu avais inversé, dans l'appel récursif, le true et le chemin du sous-répertoire. Or, ta fonction a pris ce chemin comme équivalent à true puisque tu ne précisais pas ce que tu attendais.
Or, si $recursif = 'dir/sous-dir', if ($recursif) renvoie true.

lundi 27 février 2006 à 13:16:05 | Re : Sous-répertoire non reconnu comme étant des répertoires

darkduck

Ok.
Je n'aime pas trop le ton que tu prends mais merci pour les explications.

Je ne connaissais pas !== et === je croyais que tu avais saisi trop vite.
lundi 27 février 2006 à 13:36:38 | Re : Sous-répertoire non reconnu comme étant des répertoires

WhiteDwarf

Membre Club
Waaa, on apprends des trucs tous les jours en tout cas très instructif, bon code bravo et merci, je vais faire quelques modifs sur mon "Web FTP" ... :p

@++

----------------------
La lumière étant plus rapide que le son, un homme peu paraître brillant avant qu'il se mette a parler
-----------------

lundi 27 février 2006 à 13:39:14 | Re : Sous-répertoire non reconnu comme étant des répertoires

malalam

Administrateur CodeS-SourceS
Désolé pour le ton : le but n'était pas d'être blessant, du tout. Mais si tu l'as ressenti ainsi, je suppose que je l'ai été.
Désolé, donc.
lundi 27 février 2006 à 13:52:50 | Re : Sous-répertoire non reconnu comme étant des répertoires

darkduck

Excuses acceptées...

...sans rancune

@+ et encore merci pour ton aide


Cette discussion est classée dans : repertoires, file, liste, dir, inc


Répondre à ce message

Sujets en rapport avec ce message

lister serveur + stocker BD [ par gabule ] Salut tout le monde, je voudrai lister mon serveur ( rep + fichiers), rentrer ds le fichiers et les lister (bref tout quoi)et stocker cette arborescen explorer un repertoire [ par thejoker31 ] Bonjour je souhaite afficher un repertoire et ses sous (sous) repertoires à la facon d'un arbre et pouvoir afficher les elements contenus dans les sou script php ne passe pas [ par jyrvrp35 ] Bonjour,Novice en la matière je désire savoir pourquoi je n'arrive pas à mettre un script sur le serveur one & one pour mon site.script fait en php 5 Trier données PHP [ par cd59 ] Bonjour, j'ai recherché sur le forum et sur le Net comment trier des données PHP (qui sont ensuite envoyées à Flash), et j'ai pas trouvé mon bonheur ( Problème récursivité pour arborescence de fichier [ par codbooster ] Bonjour à tous, et merci de à vous de prendre du temps pour lire mon post ... Je post aujourd'hui car j'ai un problème concernant une arbores Créer une arborescence de repertoire en xml [ par sachie ] Salut à tous , bon je précise mon truc c'est pas le php, je viens de m'y mettre par nécessité, en effet j'ai besoin de créer une arborescence xml qui lister les fichier/afficher pdf, d'un repertoire situer sur un autre serveur. [ par livinho38 ] Bonjour,Je cherche d'une part à lister (code1) et d'autre par a afficher (code 2) des fichiers pdf.ces deux codes fonctionnent bien si je cible un rep etat d'un checkbox [ par elmvaries ] salut à tous, je veux savoir comment je peux récupérer le contenu d'un checkbox coché,car je fait une formulaire mais je n'ai rien de tous...mon code probleme d'ouverture de pages [ par remir ] bonjour, j'ai creer une page perso (ftp,album photos) sur le serveur d'alice. lorsque je l'utilise mes liens ne s'ouvre pas toujours systematiquement Parcourir des repertoires (fonction recursive) [ par ov3rdoze ] SalutJe souhaite réaliser une fonction qui parcours une repertoire ainsi que ses sous-repertoires afin de recuperer les photos qu'ils contiennentJ'ai


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,576 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales