liste de fichiers dans une liste de dossiers

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : liste de fichiers dans une liste de dossiers

par Gakman » 31 oct. 2005, 16:46

Bon voilà le code final si ça peut intéressé quelqu'un :
<?
$jeu=$_GET['jeu'];
$dossier_j="j_".$jeu;


echo '<p align="center" class="gdtitre">';
include($dossier_j."/nom.php");
echo '</p><p>&nbsp;</p>';


      $handle2=opendir($dossier_j); 
        while($dossier_s=readdir($handle2)) 
        {      
            $fich_details=$dossier_j.'/'.$dossier_s.'/details.php'; 
             
            if (file_exists($fich_details))             
            {                                 
                include($fich_details);          
                echo ' 
                <table width="100%"  border="1"> 
                <tr> 
                <td class="menu"><div>'.$titre.'</div></td>
                </tr> 
                <tr> 
                <td bgcolor="#FFFFFF">';     
                $sous_dossier = opendir($dossier_j.'/'.$dossier_s);                 
                while ($fichiers_s = readdir($sous_dossier))                  
                { 
                  if ($fichiers_s != "." && $fichiers_s != ".." && $fichiers_s !="details.php") 
                  { 
                    echo '<a href='.$dossier_j.'/'.$dossier_s.'/'.$fichiers_s.'>'.$fichiers_s.'</a><br />'; 
                  } 
                }     
                closedir($sous_dossier); 
                echo '    </td> 
                </tr> 
                <tr> 
                <td align="right" class="base">Par ';

if ($site=="") {echo $auteur;}
else {echo '<a href='.$site.'>'.$auteur.'</a>';}

				echo ', le '.$date.'</td> 
                </tr> 
                </table>
				<p>&nbsp;</p>
				'; 
            } 
        }
//      closedir($dossier_j);

?>

par Gakman » 31 oct. 2005, 15:26

c'est résolu en mettant $dossier_j.'/'.$dossier_s à la place de $sous_dossier ... J'avais été trop vite et raté que $sous_dossier était un opendir() et pas seulement le chemin.

par Gakman » 31 oct. 2005, 15:17

Merci. Oui en fait c'est logique, je change pas de page je fais juste un include.
J'ai encore un problème : j'ai changé la ligne
                    echo $fichiers_s."<br />"; 
qui affichait le nom des fichiers en ceci :
                    echo '<a href='.$sous_dossier.'/'.$fichiers_s.'>'.$fichiers_s.'</a><br />'; 
afin qu'elle affiche le nom du fichier en étant un lien vers celui-ci. Mais en fait dans la page finale le lien apparaît vers "Ressource" et non le fichier :shock: ? Comment ce fait-il donc ?
En fait j'obtien très exactement dans le code source de la page affichée (par exemple pour le fichier phare.ZIP) :

Code : Tout sélectionner

<a href=Resource id #4/phare.ZIP>phare.ZIP</a><br />

par Truc » 31 oct. 2005, 01:27

tu ne dois pas faire ceci
include ("sav.php?jeu=1");
mais juste
include ("sav.php");
dans ton fichier sav.php tu poura utiliser une variable $jeu=1; directement dans le code...

une inclusion de fichier passe inaperçu regarde le fonctionnement de l'include

par Gakman » 31 oct. 2005, 01:06

Je n'arrive pas à comprendre ta réponse, en effet si je mets
include ("sav.php?jeu=1");
ça ne marche pas non plus, et point de variable ici.

par Cyrano » 31 oct. 2005, 00:37

Tu dois définir une variable et ensuite inclure le fichier. Mais dans ton fichier, il faut que tu récupères directement cette variable, pas avec $_GET ni $_POST mais telle quelle. La variable $rep étant définie avant, dans ton fichier, tu pointes directement sur $rep qui est alors accessible puisque faisant partie de la page dans laquelle il est inclus.

par Gakman » 31 oct. 2005, 00:21

bon j'ai réussi avec une petite adaptation à faire le script me convenant (merci encore Truc), mais il me reste une chose à résoudre :
je souhaite faire un include() contenant le lien vers une page avec un argument de ce type :
include ("sav.php?jeu=".$_GET['rep']);
En fait ça m'est refusé car PHP semble prendre la totale comme un fichier et non un fichier avec un argument.
J'ai essayé en déclarant directement ("sav.php?jeu=1") mais c'est pareil.

Code : Tout sélectionner

Warning: main(sav.php?jeu=1): failed to open stream: No such file or directory in /var/www/free.fr/8/3/sossauvegardes/sq3/index.php on line 14 Warning: main(): Failed opening 'sav.php?jeu=1' for inclusion (include_path='/var/www/free.fr/8/3/sossauvegardes/include:.') in /var/www/free.fr/8/3/sossauvegardes/sq3/index.php on line 14
Donc ma question est : comment faire pour pouvoir intégrer une page (j'utilise habituellement include) en ajoutant un argument ce qui est obligatoire pour ma page ?

par Truc » 28 oct. 2005, 18:30

il faut effectivement mettre le chemin complet dans opendir():

donc voila une peoposition:
$handle=opendir('.');
while($dossier_j=readdir($handle))
{
	$est_dossier=is_dir($dossier_j);
	if($est_dossier)
	{		
		$handle2=opendir($dossier_j);
		while($dossier_s=readdir($handle2))
		{ 	
			$fich_details=$dossier_j.'/'.$dossier_s.'/details.php';
			
			if (file_exists($fich_details))			
			{								
				include($fich_details); 		
				echo '
				<table width="100%"  border="1">
				<tr>
				<td bgcolor="#33FFFF">'.$titre.'</td>
				</tr>
				<tr>
				<td>';	
				$sous_dossier = opendir($dossier_j.'/'.$dossier_s);				
				while ($fichiers_s = readdir($sous_dossier)) 				
				{
				  if ($fichiers_s != "." && $fichiers_s != ".." && $fichiers_s !="details.php") 
				  {
					echo $fichiers_s."<br />";
				  }
				}	
				closedir($sous_dossier);
				echo '    </td>
				</tr>
				<tr>
				<td bgcolor="#FFFF99">Par '.$auteur.', le '.$date.'</td>
				</tr>
				</table>';
			}
		}
	}
}
closedir($handle); 
si j'ai bien suivis la construction de tes dossier ça devrai faire l'affaire :wink:

par Gakman » 28 oct. 2005, 17:46

ah mince c'est l'autre code php sur lequel vous m'avez déjà aidé que visiblement n'ai pas adapté parfaitement :(. Je vai revoir ça... et risque d'avoir encore besoin d'un coup de main ! Merci.
(cf http://www.phpfrance.com/forums/voir_re ... .php#73316)

EDIT : c'était juste une petite faute d'inattention mon autre problème, c'est résolu (ouf !). Il ne reste plus qu'à résoudre ce problème-ci. :wink:

par zeus » 28 oct. 2005, 16:32

[Mode HS]
Je t'ai envoyé un MP pour ton site perso
[/Mode HS]

par Gakman » 28 oct. 2005, 16:27

J'ai changé une ligne :
     $dossier = @opendir("./".$file."./".$file2."/");
car vu que le fichier details.php m'est renvoyé quand je le remplis de texte et que je l'avais déclaré avec "./".$file."./".$file2."/" les opendir() ne semblent pas se cumuler ? C'est-à-dire que pour un opendir() contenu dans un autre il faut déclarer tout le chemin depuis la racine ?

exemple :
accès au dossier dos1/dos2/
$dir1=opendir("./dos1/");
   $dir2=opendir("./dos2/"); ou $dir2=opendir("./dos1/dos2/"); ???
   closedir($dir2);
closedir($dir1);

par Gakman » 28 oct. 2005, 16:16

Pour tester j'ai mis du texte simple dans le fichier details.php et alors sur ma page ce texte s'affiche. Donc mon système d'ouverture de dossiers semble fonctionner, c'est le listage des fichiers qui ne va pas :( .

par Gakman » 28 oct. 2005, 15:20

<?
$handle=opendir('.');
 while($file=readdir($handle)) {
  $pt=strrpos($file,".");
  $folder_name=$file;

  $handle2=@opendir("./".$file."/");
   while($file2=@readdir($handle2)) {
    $pt=strrpos($file2,".");
    $folder_name=$file2;

    $fich="./".$file."/".$file2."/details.php";
    if (@file_exists($fich)) {
     include($fich);
  
     $dossier = @opendir("./".$file2."/");
      while ($fichier = @readdir($dossier)) {
       if ($fichier != "." && $fichier != ".." && $fichier !="details.php") {
        echo $fichier."<br />";
       }
      }
     @closedir($dossier);
 
    }  
    
   }
  @closedir($handle2);

 }
closedir($handle);
?>
mais j'obtiens toujours une page blanche ! :cry:

par Gakman » 28 oct. 2005, 15:00

Mais c'est bien sûr !
Je corrige ça tout de suite et je vous dit si ça marche ou pas !

par Truc » 28 oct. 2005, 14:47

le probleme vient du fait que tu n'entre pas dans le sous dossier pour le lister.
tu recherche le fichier "details.php" dans "j_1/details.php" mais pas dans "j_1/s_1/details.php" et "j_1/s_2/details.php"