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 :

Naviguer dans l'aborescence du serveur [Fait]


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut Naviguer dans l'aborescence du serveur
    Salut ! Je cherche à coder un formulaire me permettant de lister les dossiers du serveur, les fichiers et leur taille... Je veux surtout pouvoir naviguer dans les dossiers, mais je bloque sur ce code; il fonctionne sauf qu'il ne veut pas aller dans les sous-dossiers d'un dossier. Merci d'essayer ce code et de m'aider à le perfectionner :
    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
    <style type="text/css"> 
    <!--
     body,.mybox { 
      font-family:'Lucida console'; 
      font-size:12px; 
      color:#000000; 
      background:#DDDDDD; 
     } 
     .mybox { 
      background:#FFFFFF; 
      width:100px; 
     } 
    -->
    </style> 
    <?php 
     
    $myd=@$_POST['myd'];  // Sélection dossier
    $myf=@$_POST['myf'];  // Sélection fichier
    @chdir($myd);
    echo '<b>'.getcwd().'</b><br/>';
     
    $lstd=Array();  // Dossiers
    $lstf=Array();  // Fichiers
    $lsts=Array();  // Tailles
     
    if($handle=@opendir(getcwd())) 
      while(($file=@readdir($handle))!==false)
        if(is_dir($file)){
          $lstd[]=$file;
        }else {
          $lstf[]=$file;    
          $lsts[]=@filesize(getcwd().'/'.$file);
        };    
    @closedir($handle);
     
    echo '<form name="f1" method="post">';
    echo '<select name="myd" size="20" class="mybox" onDblClick="f1.submit();">';
    for($x=0;$x<count($lstd);$x++){
      echo '<option value="'.$lstd[$x].'"';
      if($lstd[$x]==$myd) echo ' selected';
      echo '/>'.$lstd[$x].'</option>';
    }  
    echo '</select>';
     
    echo '<select name="myf" size="20" class="mybox" style=width:300px;">';
    for($x=0;$x<count($lstf);$x++){
      echo '<option value="'.$lstf[$x].'"';
      if($lstf[$x]==$myf) echo ' selected';
      echo '/>'.$lstf[$x].' ('.$lsts[$x].')</option>';
    }  
    echo '</select>';
     
    echo '<br/>'; 
    echo '<noscript>';
    echo '<input name="lister" type="submit" value=" LISTER " class="mybox"/>';
    echo '</noscript>'; 
    echo '</form>';
    ?>

  2. #2
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    il faut une foction recursive pour qu il parcour les sous dossier non ,?

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    voir ausi la focntion glob()
    http://www.php.net/manual/fr/function.glob.php

  4. #4
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Pour ceux qui n'ont pas le temps d'essayer le code, voici à quoi ça ressemble :

    Lorsqu'on double-clique sur un dossier (liste de gauche), ça devrait afficher les fichiers de ce dossier à droite et les sous-dossiers à gauche...

    Seulement, le programme ne fonctionne qu'à un seul niveau de sous-dossier...

  5. #5
    Membre actif
    Avatar de doof
    Inscrit en
    Août 2003
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 160
    Points : 294
    Points
    294
    Par défaut
    Salut Sub0

    Je pense que sans mémoriser le dossier courant entre chaque rechargement de page, tu n'a aucune chance d'arriver a un 2eme niveau de sous dossier.

    en effet, chdir($myd) a partir du 2eme niveau n'a aucune chance de fonctionner, enleve le @ devant pour bien t'en rendre compte.

    Utilise peut-etre les sessions pour stocker le rep courant voir un champ hidden dans ton form.

  6. #6
    Membre habitué Avatar de tony montana
    Profil pro
    Inscrit en
    Février 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 114
    Points : 136
    Points
    136
    Par défaut
    salut,
    le pb vient du fait que tu ne poste pas dans le formulaire le chemin complet du répertoire, donc le chdir ne trouve pas le répertoire (sauf si le chemin a 1 sens par rapport au répertoire courant, c'est pour ca que ca marche à 1 niveau d'arborescence mais pas plus) et se place dans le répertoire ou est le script.

    j'ai remplacé :
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $lstd[]=getcwd()."/".$file;
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '/>'.$lstd[$x].'</option>';
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '/>'.basename($lstd[$x]).'</option>';

    code corrigé :
    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
    <style type="text/css">
    <!--
     body,.mybox {
      font-family:'Lucida console';
      font-size:12px;
      color:#000000;
      background:#DDDDDD;
     }
     .mybox {
      background:#FFFFFF;
      width:100px;
     }
    -->
    </style>
    <?php
     
    function getfilesize($size) {
      $units = array(' o', ' Ko', ' Mo', ' Go', ' To');
      for ($i = 0; $size > 1024; $i++) { $size /= 1024; }
      return round($size, 2).$units[$i];
    }
     
    $myd=@$_POST['myd'];  // Sélection dossier
    $myf=@$_POST['myf'];  // Sélection fichier
    @chdir($myd);
    echo '<b>'.getcwd().'</b><br/>';
     
    $lstd=Array();  // Dossiers
    $lstf=Array();  // Fichiers
    $lsts=Array();  // Tailles
     
    if($handle=@opendir(getcwd()))
      while(($file=@readdir($handle))!==false)
        if(is_dir($file)){
          $lstd[]=getcwd()."/".$file;
        }else {
          $lstf[]=$file;   
          $lsts[]=@getfilesize(filesize(getcwd().'/'.$file));
        };   
    @closedir($handle);
     
    echo '<form name="f1" method="post">';
    echo '<select name="myd" size="20" class="mybox" onDblClick="f1.submit();">';
    for($x=0;$x<count($lstd);$x++){
      echo '<option value="'.$lstd[$x].'"';
      if($lstd[$x]==$myd) echo ' selected';
      echo '/>'.basename($lstd[$x]).'</option>';
    } 
    echo '</select>';
     
    echo '<select name="myf" size="20" class="mybox" style=width:300px;">';
    for($x=0;$x<count($lstf);$x++){
      echo '<option value="'.$lstf[$x].'"';
      if($lstf[$x]==$myf) echo ' selected';
      echo '/>'.$lstf[$x].' ('.$lsts[$x].')</option>';
    } 
    echo '</select>';
     
    echo '<br/>';
    echo '<noscript>';
    echo '<input name="lister" type="submit" value=" LISTER " class="mybox"/>';
    echo '</noscript>';
    echo '</form>';
    ?>
    [edit]
    j'ai rajouté une petite fonction pour afficher la taille des fichiers avec l'unité adaptée
    [/edit]

  7. #7
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    TERRIBLE !!! :o
    J'aurai bien été incapable de trouver cette solution...

    Vous avez vu juste. J'avais essayé de mémoriser le chemin courant dans un fichier texte (sans succès), puis dans la base de données (pareil).
    Ta solution, tony, est vraiment très ingénieuse, bravo!
    Surtout merci pour avoir résolu ce problème aussi rapidement !
    Une petite question html au passage (avant d'ajouter le tag) :
    Peut-on supprimer la bordure des objets <select></select> ? Je n'ai pas réussi...
    Je pense être obligé de redessiner les listes avec des <div>... je veux ajouter des icônes devant les fichiers... éventuellement une case à cocher également... afficher la taille, le type et la date du fichier dans de nouvelles colonnes, pouvoir trier la liste... Bref, comme avec un explorateur de fichiers normal.

    [EDIT]
    Je serais ravi de continuer le développement de ce formulaire avec vous.
    Vous êtes les bienvenus, votre participation très appreciée !

  8. #8
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    J'ai modifié le code pour pouvoir utiliser les dossiers racines '.' et '..' :
    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
    $myd=@$_POST['myd'];  // Sélection dossier 
    $myf=@$_POST['myf'];  // Sélection fichier 
    if((substr($myd,-1,1)=='.')&&(substr($myd,-2,2)!='..')) $myd='';
    @chdir($myd); 
    echo '<b>'.getcwd().'</b><br/>'; 
     
    $lstd=Array();  // Dossiers 
    $lstf=Array();  // Fichiers 
    $lsts=Array();  // Tailles 
     
    if($handle=@opendir(getcwd())) 
      while(($file=@readdir($handle))!==false) 
        if((@is_dir($file))||($file=='..')){ 
          $lstd[]=getcwd().'/'.$file; 
        }else { 
          $lstf[]=$file;    
          $lsts[]=@getfilesize(filesize(getcwd().'/'.$file)); 
        };    
    @closedir($handle);
    Je l'ai testé en local et sur mon site perso chez Free, ça fonctionne, moyennant quelques @...
    -> Sujet résolu. Merci !

  9. #9
    Membre actif
    Avatar de doof
    Inscrit en
    Août 2003
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 160
    Points : 294
    Points
    294
    Par défaut
    Pour ton probleme de bordures, j'aurais eu tendance a rajouter dans le css un border:0px; mais ca ne marche pas, bizarre, j'aurais parié le contraire

    Merci pour ton invitation mais malheureusement j'ai pas trop de temps en ce moment.

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

Discussions similaires

  1. Naviguer dans l'arborescence du serveur
    Par Sub0 dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 0
    Dernier message: 14/02/2011, 19h16
  2. naviguer dans les répertoires du serveur
    Par guitz dans le forum Langage
    Réponses: 2
    Dernier message: 02/09/2006, 11h50
  3. [FLASH MX] Liens hypertext pour naviguer dans ma page
    Par marie64dk dans le forum Flash
    Réponses: 13
    Dernier message: 10/08/2004, 16h17
  4. Réponses: 4
    Dernier message: 02/07/2004, 10h31

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