Erreur sur un echo

Bonjour,

j'ai une erreur dans ce code

<?php

 $dirname = 'modules';
 $dir = opendir($dirname); 
 while($file = readdir($dir))
 {
  if($file != '.' && $file != '..' && !is_dir($dirname.$file))
  {

   if(is_file($file))
 
      echo '<a href="'.$dirname.$file.'" class="tree">'.$file.'</a><br />';
 
    else
  
     echo '<a href="'.$dirname.$file.'" class="tree2">'.$file.'</a><br />';
   }
 
   echo '<div class="last"> </div>';
  }
 closedir($dir);
 
?>


Parse error: syntax error, unexpected 'echo' (T_ECHO) in /var/www/legtux.org/users/lesite/modules/struturesite.php on line 28

merci de votre aide

11 réponses

  1. salut,

    donc du coup ce qui aurai été bien c'est
    - soit montrer la ligne qui pose problème
    - soit montrer le code complet

    car ton message indique une erreur ligne 28 tandis que le code affiché en montre 23 ..

    sinon comme ca, je dirai que ton code semble correcte, j'aurai tout de même rajouté les accolades pour le ifelse du milieu même si ce qui suit est une instruction unique (tout comme le if précédent, mais là tu as mis une accolade)

    donc juste :

     
    <?php
    
     $dirname = 'modules';
     $dir = opendir($dirname); 
     while($file = readdir($dir))
     {
      if($file != '.' && $file != '..' && !is_dir($dirname.$file))
      {
    
         if(is_file($file))
         {
              echo '<a href="'.$dirname.$file.'" class="tree">'.$file.'</a><br />';
         }
         else
         {
             echo '<a href="'.$dirname.$file.'" class="tree2">'.$file.'</a><br />';
         }
       }
     
       echo '<div class="last"> </div>';
      }
     closedir($dir);
     
    ?>
    
    


    naga
    0
    1. bonjour,

      le code et l'erreur ne sont en accord Line 28 et le code ne comprte que 23 line

      cordialment
      0
      1. ca marche ca afffiche le dossier module avec les page.php

        sauf les sous dossier du dossier module

        <?php
        echo '<ul class="tree11">
                  <li class="structure12">modules</li>
        		  </ul>';
         $dirname = 'modules';
         $dir = opendir($dirname); 
         while($file = readdir($dir))
         {
          if($file != '.' && $file != '..' && !is_dir($dirname.$file))
          {
        
             if(is_file($file))
             {
                  echo '<ul>
                                <li class="structure12"><a href="'.$dirname.$file.'">'.$file.'</a></li><br />';
             }
             else
             {
                 echo '<li class="structure15"<a href="'.$dirname.$file.'" class="tree2">'.$file.'</a></li></ul><br />';
             }
           }
         
           echo '<div class="last"> </div>';
          }
         closedir($dir);
         
        ?>
        


        es ce que je repete ce code x fois autant que j'ai un dossier ou il y a un autre moyen

        car j'ai trouver une image ceux que je veux :

        http://help.adobe.com/fr_FR/dreamweaver/cs/using/images/ln_contentsfile.png

        moi ca me donne ca il y a que les pages du dossier modules et pas les sous dossier et sous dossier

        http://leprojet.legtux.org/struturesite.html

        sinon j'ai fait une page sans ce code juste en html pour un exemple

        http://leprojet.legtux.org/plandusite.html

        donc ma question : es ce que je doit repeter le code autant de fois que j'ai un dossier ou bien il y un moyen sans repeter le code 150 fois lol

        et l'autre question si je met coté page.php une image php et page.css ca sera une image css

        comment on peut le detecter

        j'ai fait le css avec ca

             .structure13
        	  {
        	  background: url(./images/plan/structure/css.png) no-repeat -1px -3px;
        	 border-color:gray; /* on affiche la couleur de la bordure */
         	 border-style: dotted; /*  on affiche le style de l'a bordure */
        	 border-width:0px 0px 0px 1px; /* top right bottom left */
         	 margin:-12px 0px 0px 40px; /* top right bottom left */
         	 padding:0px 0px 25px 30px; /* top right bottom left */
        	  }
        
             .structure14
        	  {
        	  background: url(./images/plan/structure/html.png) no-repeat -1px -3px;
        	 border-color:gray; /* on affiche la couleur de la bordure */
         	 border-style: dotted; /*  on affiche le style de l'a bordure */
        	 border-width:0px 0px 0px 1px; /* top right bottom left */
         	 margin:-12px 0px 0px 40px; /* top right bottom left */
         	 padding:0px 0px 25px 30px; /* top right bottom left */
        	  }
        
             .structure15
        	  {
        	  background: url(./images/plan/structure/js.png) no-repeat -1px -3px;
        	 border-color:gray; /* on affiche la couleur de la bordure */
         	 border-style: dotted; /*  on affiche le style de l'a bordure */
        	 border-width:0px 0px 0px 1px; /* top right bottom left */
         	 margin:-12px 0px 0px 40px; /* top right bottom left */
         	 padding:0px 0px 25px 30px; /* top right bottom left */
        	  }
        
             .structure15
        	  {
        	  background: url(./images/plan/structure/php.png) no-repeat -1px -3px;
        	 border-color:gray; /* on affiche la couleur de la bordure */
         	 border-style: dotted; /*  on affiche le style de l'a bordure */
        	 border-width:0px 0px 0px 1px; /* top right bottom left */
         	 margin:-12px 0px 0px 40px; /* top right bottom left */
         	 padding:0px 0px 25px 30px; /* top right bottom left */
        	  }
        


        merci de ton petit aide
        0
        1. Ok donc dans un premier temps, il sera plus simple de faire une fonction récursive qui listera tes fichiers :
          function ListFiles($dir) {
          
              if($dh = opendir($dir)) {
          
                  $files = Array();
                  $inner_files = Array();
          
                  while($file = readdir($dh)) {
                      if($file != "." && $file != ".." && $file[0] != '.') {
                          if(is_dir($dir . "/" . $file)) {
                              $inner_files = ListFiles($dir . "/" . $file);
                              if(is_array($inner_files)) $files = array_merge($files, $inner_files); 
                          } else {
                              array_push($files, $dir . "/" . $file);
                          }
                      }
                  }
          
                  closedir($dh);
                  return $files;
              }
          }
          

          et la tester :
          foreach (ListFiles('/home/') as $key=>$file){
              echo $file ."<br />";
          }  
          

          (penser à remplacer le /home par le répertoire que tu souhaite).

          au moins on pourra ensuite se focaliser sur le reste mais on sera sûr que tu as bien la liste des fichiers.

          ensuite pour afficher ton arbre en graphique, on verra ensuite, et je t'avous ne pas être une flèche en css x)

          quand tu auras créé et valider ta fonction, tu araus déjà la liste complète avec le chemin complet de tous les fichiers du répertoire et ses ss répertoire.

          naga
          0
          1. css ne t'occupe pas c'est moi qui vas le faire

            voilà l'erreur

            Warning: opendir(/modules/): failed to open dir: No such file or directory in /var/www/legtux.org/users/leprojet/modules/struturesite.php on line 22

            Warning: Invalid argument supplied for foreach() in /var/www/legtux.org/users/leprojet/modules/struturesite.php on line 18

            merci de m'expliquer et faire le code pour ceux que je voudrai
            0
            1. c'est ma faute, il ne faut pas l'entourer de '/'.

              Par exemple, j'ai fais ce code pour tester chez moi :

              <?php function ListFiles($dir) {
              
                  if($dh = opendir($dir)) {
              
                      $files = Array();
                      $inner_files = Array();
              
                      while($file = readdir($dh)) {
                          if($file != "." && $file != ".." && $file[0] != '.') {
                              if(is_dir($dir . "/" . $file)) {
                                  $inner_files = ListFiles($dir . "/" . $file);
                                  if(is_array($inner_files)) $files = array_merge($files, $inner_files); 
                              } else {
                                  array_push($files, $dir . "/" . $file);
                              }
                          }
                      }
              
                      closedir($dh);
                      return $files;
                  }
              }
              
              print_r(ListFiles('images'));
              ?>
              


              qui fonctionne très bien.

              L'idée ensuite sera faire un tableau à plusieurs dimensions, mais j'y reviendrai. Essaye déjà d'afficher toute cette liste de fichier ;) (mmh question con mais quelle est ta version de php?)
              0
          2. il me fait ca

            Array ( )

            je ne sais pas qu'elle est ma version

            tu me dit ou il se trouve et je te dit
            0
            1. quel répertoire as-tu mis en paramètre? celui de ton répertoire modules ? (donc
              print_r(ListFiles('modules'));
              )
              pour les info php, mets dans le code
               phpinfo(); 
              0
          3. merci là il m'affiches

            http://leprojet.legtux.org/struturesite.html

            on dirais qu'il affiche les sous dossier du dossier modules

            hier j'avais mis images là il met array()

            donc là j'ai mis modules et je vois tout les pages et sous dossier

            <?php function ListFiles($dir) {
            
                if($dh = opendir($dir)) {
            
                    $files = Array();
                    $inner_files = Array();
            
                    while($file = readdir($dh)) {
                        if($file != "." && $file != ".." && $file[0] != '.') {
                            if(is_dir($dir . "/" . $file)) {
                                $inner_files = ListFiles($dir . "/" . $file);
                                if(is_array($inner_files)) $files = array_merge($files, $inner_files); 
                            } else {
                                array_push($files, $dir . "/" . $file);
                            }
                        }
                    }
            
                    closedir($dh);
                    return $files;
                }
            }
            
            print_r(ListFiles('modules'));
            ?>
            
            0
            1. bon on y arrive x)

              Donc maintenant que tu as la liste des fichiers avec leur chemin complet, chaque dossier étant séparé par un '/' ( ou '\' ).

              Là tu as la logique pour parcourir et lister, il ne te reste qu'à mettre en place des éléments pour structurer. C'est à toi de décider de la manière de faire, je t'es fais un exemple pour t'aider un peu, à toi de t'en inspirer ou non :

              <?php 
              class threeFiles
              {
              	var $dir;
              	var $subArraySubFolders;
              	var $files;
              	
              	function getString()
              	{
              		$returnValue = '';
              		$returnValue .= $this->dir . "<UL>";
              		
              		foreach($this->files as $s)
              			$returnValue .= "<LI>" . $s . "</LI>";
              		foreach($this->subArraySubFolders as $tf)
              			$returnValue .= "<LI>" . $tf->getString() . "</LI>";
              		$returnValue .="</UL>";
              		return $returnValue;
              		
              	}
              }
              
              
              function ListFiles($dir) 
              {
              	if($dh = opendir($dir)) 
              	{
              		$tf = new threeFiles();
              		$tf->dir = $dir;
              		$tf->files = Array();
              		$tf->subArraySubFolders = Array();
              		
              		$i = 0;
              		
              		while($file = readdir($dh)) 
              		{
              			if($file != "." && $file != ".." && $file[0] != '.') 
              			{
              				if(is_dir($dir . "/" . $file)) 
              				{
              					$tf->subArraySubFolders[$i] = ListFiles($dir . "/" .$file);
              					$i++;
              				} 
              				else 
              				{
              					array_push($tf->files,$file);
              				}
              			}
              		}
              		closedir($dh);
              		return $tf;
              	}
              }
              
              echo('v1');
              echo(ListFiles('images')->getString());
              
              
              ?>
              


              ici aussi il faut changer 'images' par 'module'

              naga
              0
          4. comme sur mon exemple que je me suis fait dans lordre

            http://leprojet.legtux.org/plandusite.html
            0
            1. une dernière question après c'est bon

              comment mettre le dossier en 1 er position et en sous des dossier c'est les pages

              et pour afficher un autre dossier a la racine je doit copier le code et remplacer modules par design

              et pour les sous dossier

              au lieu de mettre
              modules/tuto

              on affiche

              module

              tuto

              sans le mettre des /
              0
              1. si tu reprend mon code, la classe correspond à un dossier, donc il te suffit de construire ta chaine (getString).

                naga
                0
              2. merci, je vais faire les css et après on verra mieux et je te dirais ceux qui vas ou ceux qui ne vas pas
                0
              3. ca marche ;)
                0
            2. j'ai tester en mettant le css ca me donne

              http://leprojet.legtux.org/struturesite.html

              il y a 2 ou 3 truc que je n'arrives pas a le faire

              <?php 
              class threeFiles
              {
              	var $dir;
              	var $subArraySubFolders;
              	var $files;
              	
              	function getString()
              	{
              		$returnValue = '<ul><li class="structure12">';
              		$returnValue .= $this->dir . "<br />";
              		
              		foreach($this->files as $s)
              			$returnValue .= "<br />" . $s . "";
              		foreach($this->subArraySubFolders as $tf)
              			$returnValue .= "<br />" . $tf->getString() . "";
              		$returnValue .="</il></ul>";
              		return $returnValue;
              		
              	}
              }
              
              
              function ListFiles($dir) 
              {
              	if($dh = opendir($dir)) 
              	{
              		$tf = new threeFiles();
              		$tf->dir = $dir;
              		$tf->files = Array();
              		$tf->subArraySubFolders = Array();
              		
              		$i = 0;
              		
              		while($file = readdir($dh)) 
              		{
              			if($file != "." && $file != ".." && $file[0] != '.') 
              			{
              				if(is_dir($dir . "/" . $file)) 
              				{
              					$tf->subArraySubFolders[$i] = ListFiles($dir . "/" .$file);
              					$i++;
              				} 
              				else 
              				{
              					array_push($tf->files,$file);
              				}
              			}
              		}
              		closedir($dh);
              		return $tf;
              	}
              }
              
              echo('v1');
              echo(ListFiles('modules')->getString());
              
              
              ?> 
              


              1 er chose il y as modules/admin et moi j'ai supprime le / en remplacant par un <br /> mais ca se plante

              2 eme chose : j'ai voulu aligner le dossier module sur la 1 er collonneet sous dossier sur un deuxiememe collonne

              3 eme chose c'est de mettre en premier les nom des dossier et ensuite les pages

              es ce que tu pourrais ds le code le faire

              et tu rajoute des commentaire /////*****

              et tu mettra ceux que ca fait
              0
              1. 
                		$returnValue .="</il></ul>";
                


                déjà tu as une erreur ici ("il" ...).

                -1 : ce qu'il te faut c'est récupérer la partie de droite (admin) plutot que modules/admin (je serai plutot pour dire de le retirer à l'affichage pour ne pas retoucher le code de parcours). Donc utiliser la fonction explode en php (https://www.php.net/manual/fr/function.explode.php

                -2 : corrige le "li" on verra ensuite ce que ca donne

                -3 : pas difficile => tu n'as que 2 foreaach dans la méthode d'affiche ... suffit de mettre en premier les répertoires.

                donc
                	function getString()
                	{
                    //--on récupère le nom court du sous rep
                                $arrRep = explode("/", $this->dir);
                                $subDir = $arrRep[count($arrRep)-1];
                   //--On écris le nom du rep
                		$returnValue = '<ul><li class="structure12">';
                		$returnValue .= $subDir . "<br />";
                  //--on récupère chaque ssrep
                		foreach($this->subArraySubFolders as $tf)
                			$returnValue .= "<br />" . $tf->getString() . "";
                  //--on récupère les fichiers de notre rep
                		foreach($this->files as $s)
                			$returnValue .= "<br />" . $s . "";
                
                		$returnValue .="</li></ul>";
                		return $returnValue;
                		
                	}
                


                naga
                0
            3. voilà le code avec class

              <div class="structure_site">
              <?php 
              class threeFiles
              {
              	var $dir;
              	var $subArraySubFolders;
              	var $files;
              	
              	function getString()
              	{
                  //--on récupère le nom court du sous rep
                              $arrRep = explode("/", $this->dir);
                              $subDir = $arrRep[count($arrRep)-1];
                 //--On écris le nom du rep
              		$returnValue = '<ul><li class="structure1">';
              		$returnValue .= $subDir . "<br />";
                //--on récupère chaque ssrep
              		foreach($this->subArraySubFolders as $tf)
              			$returnValue .= "<br />" . $tf->getString() . "";
                //--on récupère les fichiers de notre rep
              		foreach($this->files as $s)
              			$returnValue .= "<br />" . $s . "";
              
              		$returnValue .="</li></ul>";
              		return $returnValue;
              		
              	}
              }
              
              
              function ListFiles($dir) 
              {
              	if($dh = opendir($dir)) 
              	{
              		$tf = new threeFiles();
              		$tf->dir = $dir;
              		$tf->files = Array();
              		$tf->subArraySubFolders = Array();
              		
              		$i = 0;
              		
              		while($file = readdir($dh)) 
              		{
              			if($file != "." && $file != ".." && $file[0] != '.') 
              			{
              				if(is_dir($dir . "/" . $file)) 
              				{
              					$tf->subArraySubFolders[$i] = ListFiles($dir . "/" .$file);
              					$i++;
              				} 
              				else 
              				{
              					array_push($tf->files,$file);
              				}
              			}
              		}
              		closedir($dh);
              		return $tf;
              	}
              }
              echo '';
              echo('v1');
              echo(ListFiles('modules')->getString());
              echo '';
              ?> 
               
               
               
               
              </div>
              
              


              j'ai mis une bordure pour te montrer

              donc il faut que les dossier et sous dossier passe en haut du contour du cadre de la struture1 si tu remarque sur l'image dossier il y a une petite bordure qui decend dc c pour ca qu'il faut mettre le dossier en haut du cadre et non a l'interieur

              j'ai essayer de mettre la class structure 1 ds cette parti là

              echo '';
              echo('v1');
              echo(ListFiles('modules')->getString());
              echo '';

              mais ca bug

              et ensuite il faut rajouter une nouvelle class struture2 là c'est pour afficher juste une image horizontal qui vas etre situer sur les .php
              0
              1. oui enfin mon but n'est pas de développer ton site, je pense t'avoir fourni suffisamment de piste et morceaux de codes pour que tu puisse le modeler à ta sauce en comprenant le code et en réfléchissant.

                Si tu as une erreur précise durant ton dev, n'hésites pas à demander, mais ici tu ne trouvera personnes qui te développera des solutions complètes ( pour ca, on est payé ^^).

                bon dev.
                naga
                0