Erreur sur un echo

ivan -  
 ivan -
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. Utilisateur anonyme
     
    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
  2. buyaman Messages postés 722 Statut Membre 211
     
    bonjour,

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

    cordialment
    0
  3. ivan
     
    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
  4. Utilisateur anonyme
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ivan
     
    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. Utilisateur anonyme
       
      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
  7. ivan
     
    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. Utilisateur anonyme
       
      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
  8. ivan
     
    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. Utilisateur anonyme
       
      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
  9. ivan
     
    comme sur mon exemple que je me suis fait dans lordre

    http://leprojet.legtux.org/plandusite.html
    0
  10. ivan
     
    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. Utilisateur anonyme
       
      si tu reprend mon code, la classe correspond à un dossier, donc il te suffit de construire ta chaine (getString).

      naga
      0
    2. ivan
       
      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. Utilisateur anonyme
       
      ca marche ;)
      0
  11. ivan
     
    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. Utilisateur anonyme
       
      
      		$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
  12. ivan
     
    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. Utilisateur anonyme
       
      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