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 :

[Tableaux] Passer la valeur d'un dossier dans une fonction


Sujet :

Langage PHP

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut [Tableaux] Passer la valeur d'un dossier dans une fonction
    Bonjour,
    je me casse la tete depuis un momnent car j'ai besoin d'entrer la valeur d'un dossier au lieu de root. et ca marche pas. Pour etre plus clair voci, le code:

    ma fonction:
    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
    # Liste tous les dossier
    $tabl_exclus = array ('.', '..','php','inc');
     
    // Parcours le répertoire courant et tout ses sous-répertoires récursivement.
    function liste_repertoire($dir) {
    	if ($handle = opendir($dir)) {
     
    		while (($file = readdir($handle)) !== false) {
    			if(is_dir($file)){
    				if(!in_array($file, array('.','..'))){ //on eleve le parent et le courant '. et ..'
    					$chemin_fichier = $dir.''.$file;
     
    					$chemin=str_replace(".","",$chemin_fichier);
     
    					if($chemin!="php" AND $chemin!="img" ){ #Pour ne pas afficher certain dossier
    						echo $chemin;
    						echo '<br>';
     
    						echo '<option value="'.$chemin.'">'.$chemin.'</option>';
    					}
    					if (is_dir($chemin_fichier)) {
    						if (!in_array($file, $GLOBALS['tabl_exclus'])) {
    							liste_repertoire($dir.''.$file);
    						}
    					} 
    				}
    			}
    		}
    		closedir($handle);
    	}
    	#foreach($file as $val) {
    		#echo $val.'<br>';
    	#}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	liste_repertoire('.');
    Si je laisse le point de "liste_repertoire('.');" il va me lister les dossier qui se trouve dans root.

    Jusqu'a la ca marche tres bien

    Si par contre, je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste_repertoire('doc/doc/');
    il ne liste plus ce qu'il y a dans doc/doc/ (admettons qu'il y a 3 dossier)

    Il me semble que ca bloque au niveau de is_dir(), juste qu dessous de la boucle while

    Pourquoi????


    Pouvez vous m'aider? merci
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 292
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 292
    Points : 15 608
    Points
    15 608
    Par défaut
    si tu es sous Linux, est ce que tu as vérifié que tous les dossiers parents ont le droit "x" pour tout le monde ?

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut
    Hou, ben ca absolument pas.
    Mais pourquoi ca passe sous . et pas sous dossier/dossier/ (un chemin donné)???

    y a donc un moyen pour mettre tous ces dossiers en x? via php
    C'est quoi l'équivalent de chmod mais pour un dossier?
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  4. #4
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut
    Mais je peux uploader des fichier dans ces dossier, es ce vraiment u probleme de droit?
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Vous ne donnez à la fonction is_dir qu'une partie du chemin, en conséquence il va chercher $file dans le répertoire courant ce qui donne un résultat erroné évidemment. La fonction readdir ne donne que le nom du fichier et non un chemin (relatif comme absolu).

    La correction à apporter serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(is_dir($dir . $file)){
    Voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(is_dir($dir . DIRECTORY_SEPARATOR . $file)){
    Si $dir ne contient pas à la fin le délimiteur de répertoire.

    PS : les concaténations avec une chaîne vide comme $dir.''.$file sont strictement inutiles ($dir . $file suffit).

  6. #6
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut
    ok, ben ca va deja un peu mieux.

    Maintenant c'est le deuxieme appelle.

    Donc en premier il liste les dossier qui se trouve dans le chemin specifié ($dir)
    Mais si il trouve un repertoire, il ne va pas lister ce qu'il y a dedans

    Donc a ce niveau, si c'est repertoir il rapelle la fonction mais se passe pas
    $dir=doc/doc/
    $chemin=unRepertoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (is_dir($dir.$chemin)) {
    					#echo $chemin.'<br>';
    						if (!in_array($file, $GLOBALS['tabl_exclus'])) {
    							#echo '<p>'.$dir.''.$file.'</p>';
    							liste_repertoire($dir.'/'.$chemin);
    						}
    					}
    J'ai corrigé comme 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
    function liste_repertoire($dir) {
    	if ($handle = opendir($dir)) {
     
     
    		while ((false !== $file = readdir($handle))) {
    			if(is_dir($dir.$file)){
    				if(!in_array($file, array('.','..'))){ //on eleve le parent et le courant '. et ..'
     
    					$chemin_fichier = $dir.''.$file;
     
    					$chemin=str_replace($dir,"",$chemin_fichier);
     
    					if($chemin!="php" AND $chemin!="img" ){ #Pour ne pas afficher certain dossier
    					echo $chemin.'<br>';
    						#echo '<br>';
     
    						#echo '<option value="'.$chemin.'">'.$chemin.'</option>';
    					}
    					if (is_dir($dir.$chemin)) {
    					#echo $chemin.'<br>';
    						if (!in_array($file, $GLOBALS['tabl_exclus'])) {
    							#echo '<p>'.$dir.''.$file.'</p>';
    							liste_repertoire($dir.'/'.$file);
    						}
    					} 
    				}
    			}
    		}
    		closedir($handle);
    	}
    }
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  7. #7
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut
    J'arrive a bon resultat comme ceci. Mais j'avoue que j'ai du mal a comprendre
    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
    function liste_repertoire($dir) {
    	if ($handle = opendir($dir)) {
     
     
    		while ((false !== $file = readdir($handle))) {
    			if(is_dir($dir.$file)){
    				if(!in_array($file, array('.','..'))){ //on eleve le parent et le courant '. et ..'
     
    					$chemin_fichier = $dir.''.$file;
     
    					$chemin=str_replace($dir,"",$chemin_fichier);
     
    					if($chemin!="php" AND $chemin!="img" ){ #Pour ne pas afficher certain dossier
     
    					}
    					if (is_dir($dir.$chemin)) {
    						if (!in_array($file, $GLOBALS['tabl_exclus'])) {
    							echo '<p>'.$dir.$chemin.'</p>';
    							liste_repertoire($dir.$chemin.'/');
    						}
    					} 
    				}
    			}
    		}
    		closedir($handle);
    	}
    }
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/12/2009, 15h01
  2. Passer la valeur d'un champs a une fonction
    Par beegees dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 26/01/2009, 18h55
  3. Passer en paramètre un tableau php dans une fonction javascript
    Par hartecel dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 17/07/2008, 15h17
  4. Passer un tableau PHP en argument dans une fonction javascript ?
    Par The Molo dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 18/05/2007, 12h31
  5. passer la valeur d'un return dans une méthode
    Par belukrin dans le forum Langage
    Réponses: 1
    Dernier message: 25/03/2006, 06h58

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