Erreur sur un echo

Fermé
ivan - 30 janv. 2014 à 14:54
 ivan - 3 févr. 2014 à 14:45
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

Utilisateur anonyme
30 janv. 2014 à 15:23
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
buyaman Messages postés 694 Date d'inscription mardi 3 décembre 2013 Statut Membre Dernière intervention 16 janvier 2019 206
30 janv. 2014 à 15:23
bonjour,

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

cordialment
0
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
Utilisateur anonyme
30 janv. 2014 à 17:20
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
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
Utilisateur anonyme
31 janv. 2014 à 07:48
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
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
Utilisateur anonyme
31 janv. 2014 à 09:27
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
comme sur mon exemple que je me suis fait dans lordre

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

naga
0
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
Utilisateur anonyme
3 févr. 2014 à 11:02
ca marche ;)
0
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
Utilisateur anonyme
3 févr. 2014 à 11:24

		$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
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
Utilisateur anonyme
3 févr. 2014 à 14:24
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
je comprend, je vais essayer

sinon tu pourras regarde ma question sur mon calendrier

https://forums.commentcamarche.net/forum/affich-29620689-question-sur-mon-calendrier

c juste 2 question

merci
0