[RESOLU]ouvrir un répertoire sélectionné et lister

ouvrir un répertoire sélectionné et lister [RESOLU] - PHP - Programmation

Marsh Posté le 18-01-2007 à 20:01:04    

salut à tous,
 
Voilà je dois faire un gestionnaire de fichier en PHP avec session multiutilisateur....jusque là pas de problème. Lorsque l'utilisateur s'enregistre la 1ere fois je  ca crée un répertoire à son nom dans lequel il va enregistrer ses fichiers. J'arrive donc à afficher le contenu de ces répertoire pour chaque utilisateur.  
Là où ça se gate, c'est quand il a un répertoire dedans. Je n'arrive pas à l'ouvrir.  
 
le contenu de son répertoire est listé en tableau. S'il y a un autre répertoire dedans je voudrais pouvoir afficher son contenu...mais je n'arrive pas à paramétrer mon <HREF="<?...?>"></a> pour qu'il ouvre le répertoire sur lequel j'ai mon curseur...
 
Peut être avez vous une petite idée??? :love:


Message édité par vichenzo le 20-01-2007 à 13:48:41
Reply

Marsh Posté le 18-01-2007 à 20:01:04   

Reply

Marsh Posté le 19-01-2007 à 00:55:34    

tu rapelle ta fonction sur ce nouveau répertoire (fonction récursive donc)
 

Reply

Marsh Posté le 19-01-2007 à 18:00:57    

zapan666 a écrit :

tu rapelle ta fonction sur ce nouveau répertoire (fonction récursive donc)


 
je pense qu'avec mon code ça sera plus facile :

Code :
  1. <TABLE border=1 WIDTH=100% CELLSPACING="1">
  2. <TR>
  3. <?
  4. $rep=opendir("rep_utilisateurs/$pseudo" );
  5. chdir("rep_utilisateurs/$pseudo" ); // chdir signifie "rends toi physiquement ds le rep"
  6. if ($handle = opendir('.'))
  7. {
  8. while (false !== ($fichier=readdir($rep)))
  9. {
  10.  if ($fichier != "." && $fichier != ".." )
  11.   {
  12.   if (is_dir($fichier))
  13.    {
  14.    ?>
  15.    <TD BGCOLOR=#A9A9A9><A HREF="<?
  16.    ////////////////////////////////////////////////////
  17. c'est ici que je voudrais  pouvoir cliquer et aller dans le répertoire dans sur lequel je clique
  18.    ////////////////////////////////////////////////////
  19.    ?>"><IMG SRC="images/dir.gif" border="0"></a></TD>
  20.    <TD BGCOLOR=#A9A9A9> <? echo $fichier; //si un répertoire j'affiche son nom...?></TD>
  21.    <TD BGCOLOR=#A9A9A9></TD>
  22.    <?
  23.    }
  24.   else
  25.    {
  26.    ?>
  27.    <TD BGCOLOR=#DCDCDC>
  28.    <?
  29.     $ext = GetExtension($fichier);
  30.     $ext = strtolower($ext);
  31.     $icone = GetIcone($ext);
  32.    ?>
  33.    <IMG SRC ="images/<? echo $icone ?>">
  34.    </TD>
  35.    <TD BGCOLOR=#DCDCDC WIDTH=100%> <?
  36.    ///////////////////////////////////////////////////////////////
  37.                                  /////ici pb pour ouvrir le fichier selectionné///////////////////
  38.                        echo "<A HREF=\"$fichier\">" . $fichier . "</a>"?>
  39.    <?
  40.    <TD BGCOLOR=#DCDCDC NOWRAP> <?
  41.    $taille = filesize($fichier);
  42.    if ($taille < 1024)
  43.     {
  44.      $tmp = number_format($taille)." octets";
  45.     }
  46.    elseif ($taille > 1024 && $taille < 1048576)
  47.     {
  48.      $tmp = number_format($taille / 1024)." Ko";
  49.     }
  50.    elseif ($taille > 1048576 && $taille < 1073741824)
  51.     {
  52.      $tmp = number_format(($taille / 1048576), 2)." Mo";
  53.     }
  54.    echo $tmp;
  55.    ?>
  56.    </TD>
  57.    <?
  58.    }
  59.   }
  60.   ?>
  61.  </TD>
  62. </TR>
  63. <? }
  64. }
  65. closedir($handle);?>
  66. </TABLE>


En fait je m'emele les pinceaux avec mes session...car dans un premier temps j'ouvre le reperrtoire de l'utilisateur concerné et ça marche...mais après pour ouvrir les sous répertoires j'ai du mal...
Je crois que je me complique trop l'esprit..
 :(

Reply

Marsh Posté le 19-01-2007 à 18:23:29    

Transforme ça en procédure avec en paramètre un répertoire.
 

Code :
  1. function exploreRepertoire( $repertoire ) {
  2. // ton code
  3. $rep=opendir($repertoire);
  4. ...
  5. }


 
et lors de la première utilisation tu mets :  
 

Code :
  1. exploreRepertoire("rep_utilisateur/".$pseudo);


 
et dans ta procédure ( exploreRepertoire ), quand tu tombe sur un répertoire, tu rappel la procédure avec ce nouveau répertoire:  

Code :
  1. if (is_dir($fichier)) {
  2. exploreRepertoire($fichier);
  3. }


Reply

Marsh Posté le 19-01-2007 à 18:27:01    

met dans une fonction toute la partie qui va de "j'ouvre le répertoire" (opendir) jusqu'au "je referme le répertoire" (closedir).
Ensuite, en paramettre de la fonction, tu passe le nom et chemin du dossier à ouvrir ainsi que le niveau d'imbrication.
De cette maniére tu pouras parcourir plusieurs dossier à la fois vu que pour chaque dossier la fonction sera lancé une fois et que chaque exécution de la fonction conaitra ces variables à elle et pas celles du lancement d'avant ou d'aprés.
 
Le niveau d'imbrication passé en paramettre peut servir à faire un décalage quand tu changes de dossier. Il peut aussi servir à éviter de boucler indéfiniment en sortant de la fonction dés qu'on a passé un certain nombre d'imbrication.
 
A noter qu'il ne faut pas rentrer dans les dossiers '..' et '.' qui sont respectivement le dossier pére et le dossier courant. Dans les deux cas, tu te retrouverais à boucler indéfiniment.
 
Petite remarque en passant : les tables html ne sont pas faite pour cette utilisation là. Elles sont faites pour afficher de vrai tableaux. Utilise plustôt les listes html vu que tu cherches à afficher des listes de fichiers et dossiers. En rajoutant un peu de css, tu peux leur enlever la vignette et retomber sur un affichage semblable à ce que t'as déjà. Les deux principaux avantages à utiliser des listes plustôt que des tableaux, c'est que la page sera moins lourdes (donc moins de bande passante dépensé et plus de rapidité à la récupération et à l'affichage) et surtout que les navigateurs pour malvoyants pouront indiquer les choses comme il faut vu que la sémantique des balises sera respecté.

Reply

Marsh Posté le 19-01-2007 à 18:36:12    

ok merci beaucoup les gars je vais essayer de faire tout ça...merciiii

Reply

Marsh Posté le 20-01-2007 à 13:48:05    

C'est bon ça marche merci beaucoup!

Reply

Marsh Posté le 20-01-2007 à 14:01:55    

tu as essayer la fonction scandir(); ?

Reply

Marsh Posté le 20-01-2007 à 15:57:38    

non je n'ai pas essayé cette fonction...mais j'ai fais comme il m'a été conseillé...j'ai crée une fonction que je rappelle chaque fois que j'ai besoin...et emballé c'est pesé :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed