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. 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
    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
  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
    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
  3. 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 /
    1. si tu reprend mon code, la classe correspond à un dossier, donc il te suffit de construire ta chaine (getString).

      naga
    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
    3. ca marche ;)
  4. comme sur mon exemple que je me suis fait dans lordre

    http://leprojet.legtux.org/plandusite.html
    1. 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'));
      ?>
      
      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
    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
      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(); 
    3. 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
      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?)
    4. 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
      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
        1. bonjour,

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

          cordialment
          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