Parse error Moteur de recherche

Résolu
Bonjour,
Dans le cadre d'un site de documentation en local, avec Easyphp 2.0B1 je cherche à créer un moteur de recherche permettant la consultation de la docs.
J'utilise les scripts qui sont sur CCC et je me heurte toujours au même problème,et je tourne autour depuis un bout de temps sans pouvoir le résoudre. Pour infos je suis tout à fait débutant en PHP. J'ai l'erreur suivante :
Parse error : parse error, unexpected $end in C:\Program Files\Internet\EasyPHP 2.0b1\www\Dream0.6\indexation du site on line 93
la ligne 93 est la dernière.
Le script :
<?php
echo "
<p>\n
<table BGCOLOR=\"#EFF2FB\" BORDER=\"0\"
CELLSPACING=\"0\"
CELLPADDING=\"1\"
WIDTH="%">\n
<tr><td>\n
<a name=\"index\"><h2>Indexation du site en cours</h2></a>\n
</td></tr>\n
</table>\n
<p>\n";

$host = "localhost";

$bdd = "moteur06";

/* Connexion avec MySQL */
mysql_connect($host,$user,$password) or die ("Impossible de se connecter
au serveur de base de donnees");

mysql_select_db(moteur06) or die ("Impossible d'accéder à la base moteur06");

$query = "DELETE FROM search";

mysql_query($query) or die ("Erreur de modification de la table");

function ScanDir($Directory){
$MyDirectory = opendir($Directory);

while($Entry = readdir($MyDirectory)) {
echo "<br>entry= $Entry<br>";

echo "repertoire= $Directory<br>";

echo "chemin= $Directory/$Entry<br>";

if(is_dir(Entry)&& $Entry != "." && $Entry != "..") {
echo "<b><font color=\"red\">$Entry</font>
</b> est un repertoire<br>";

ScanDir("$Entry/$Directory");

}
else {
if (eregi(".htm",$Entry)) {
$MetaTags = get_meta_tags($Directory."/".$Entry);

if ($MetaTags["robots"] == "all") {
$MetaKey = $MetaTags["keywords"];

$MetaKey = strtoupper($MetaKey);

echo "Meta($Directory/$Entry): $MetaKey
\n";

$MetaTitre = $MetaTags["title"];

echo "Meta($Directory/$Entry): $MetaTitre
\n";

$query = "INSERT INTO search (lien,keyword,titre)
VALUES(\"$Directory/$Entry\",\"$MetaKey\",\"$MetaTitre\")";

$mysql_result = mysql_query($query) or die ("Erreur
de modification de la table par la requete \"$query\"");

}
}
}
}
closedir($MyDirectory);

echo "OK close dir";

open_basedir(".");

$ScanDir=(".");

mysql_close();

?>

Merci de m'aider à résoudre ce problème
Configuration: Windows XP
Firefox 2.0.0.12

15 réponses

  1. merci d'avoir corriger l'erreur sur la page principale proposer cela fonctionne très bien .
    https://www.commentcamarche.net/contents/801-php-creer-un-moteur-de-recherche
    Dommage qu'il n'y est aucune correction du post ni un lien vers cette correction
    je souhaite avoir la suite de cette page malheuresement non corriger
    la derniere partit du code ne charge pas les mots demander
    la correction très bien faite recherche très bien les meta inserer
    manquant: le code pour l'affichage de ces données inserer des les tables
    merci de répondre afin de completer ce post entierement
    webmaster@la-boite-noire.com
    1. Oulaa, J'ai dit une grosse bêtise là :p

      Il est possible de faire un echo sur plusieurs lignes.
      Ce que je ne fait jamais (au point de croire que c'était impossible :p)

      Par contre une des erreurs venait bien de là.

      Car la ligne : WIDTH="%">\n possédait des guillemets non échappés.

      Avec la syntaxe "here doc", on risque moins les erreurs de ce type.

      voici le code corriger :

      <?php
      echo <<<END
      <p>\n
      <table BGCOLOR="#EFF2FB" BORDER="0"
      CELLSPACING="0"
      CELLPADDING="1"
      WIDTH="%">
      <tr><td>
      <a name="index"><h2>Indexation du site en cours</h2></a>
      </td></tr>
      </table>
      <p>
      END;
      
      $host = "localhost";
      $user = "root"; // A adapter
      $password = ""; // A adapter
      $bdd = "moteur06";
      
      /* Connexion avec MySQL */
      mysql_connect($host,$user,$password) or die ("Impossible de se connecter au serveur de base de donnees");
      
      mysql_select_db($bdd) or die ("Impossible d'accéder à la base moteur06");
      
      $query = "DELETE FROM search";
      
      mysql_query($query) or die ("Erreur de modification de la table");
      
      function ScanThisDir($Directory)
      {
          $MyDirectory = opendir($Directory);
      
          while ($Entry = readdir($MyDirectory)) 
          {
              echo "<br>entry= $Entry<br>";
              echo "repertoire= $Directory<br>";
              echo "chemin= $Directory/$Entry<br>";
      
              if (is_dir($Entry) && $Entry != "." && $Entry != "..")
              {
                  echo "<b><font color=\"red\">$Entry</font></b> est un repertoire<br>";
                  ScanThisDir("$Directory/$Entry");
      
              }
              else 
              {
                  if (eregi(".htm",$Entry))
                  {
                      $MetaTags = get_meta_tags($Directory."/".$Entry);
          
                      if (array_key_exists('robots', $MetaTags) && ($MetaTags["robots"] == "all"))
                      {
                          $MetaKey = $MetaTags["keywords"];
      
                          $MetaKey = strtoupper($MetaKey);
      
                          echo "Meta($Directory/$Entry): $MetaKey<br>\n";
                          $MetaTitre = $MetaTags["title"];
                          echo "Meta($Directory/$Entry): $MetaTitre<br>\n";
      
                          $query = "INSERT INTO search (lien,keyword,titre) VALUES(\"$Directory/$Entry\",\"$MetaKey\",\"$MetaTitre\")";
      
                          $mysql_result = mysql_query($query) or die ("Erreur de modification de la table par la requete \"$query\"");
                      }
                  }
              }
          }
          closedir($MyDirectory);
      }
          echo "OK close dir";
      
          $open_basedir = ".";
      
          ScanThisDir(".");
      
          mysql_close();
      
      ?> 
      1. Bonjour
        Merci de ton aide ulukyn, j'ai plus avancé en 2 posts qu'après quelques échanges stériles, je crois que pour la suite je vais me débrouiller.
        Merci encore.
    2. Pas besoin de chercher de ligne 93, il y a une erreur au premier echo.

      Il n'ets pas possible de faire un echo sur plusieurs lignes de cette manière, même en échappant les guillemets.

      https://www.php.net/echo

      <?php
      echo <<<END
      <p>
      <table BGCOLOR="#EFF2FB" BORDER="0"
      CELLSPACING="0"
      CELLPADDING="1"
      WIDTH="%">
      <tr><td>
      <a name="index"><h2>Indexation du site en cours</h2></a>
      </td></tr>
      </table>
      <p>
      END;

      Pour corriger le code :)
      1. Bon c'est bien tout ça, si j'avais été capable de trouver la réponse sur Google je n'aurais pas poster sur le Forum.
        Je pensais y trouver de l'aide, un forum c'est pour les débutants (du moins je croyais) mais apparemment le Grizzly est un ours ... et je vais aller voir ailleurs.
        Merci
      2. Contributeur
        Déjà dit plus haut.

        $ScanDir=("."); → ScanDir(".");

        fais qqch quoi. soit tu copies colles tel que, soit tu apprends les bases du php et tu fais des modifications...
        1. déjà fait précédemment
          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
          <html xmlns="http://www.w3.org/1999/xhtml">
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
          <title>Indexation du site</title>
          </head>
          
          <body>
          <?php
          echo "
          <p>\n
          <table BGCOLOR=\"#EFF2FB\" BORDER=\"0\"
          							CELLSPACING=\"0\"
          							CELLPADDING=\"1\"
          							WIDTH="%">\n
          <tr><td>\n
          <a name=\"index\"><h2>Indexation du site en cours</h2></a>\n
          </td></tr>\n
          </table>\n
          <p>\n";
          
          $host = "localhost";
          
          $bdd = "moteur06";
          
          /* Connexion avec MySQL */
          mysql_connect($host,$user,$password) or die ("Impossible de se connecter
          au serveur de base de donnees");
          
          mysql_select_db(moteur06) or die ("Impossible d'accéder à la base moteur06");
          
          $query = "DELETE FROM search";
          
          mysql_query($query) or die ("Erreur de modification de la table");
          
          function ScanDir($Directory){
          $MyDirectory = opendir($Directory);
          
          	while($Entry = readdir($MyDirectory)) {
          		echo "<br>entry= $Entry<br>";
          
          		echo "repertoire= $Directory<br>";
          
          		echo "chemin= $Directory/$Entry<br>";
          
          		if(is_dir(Entry)&& $Entry != "." && $Entry != "..") {
          			echo "<b><font color=\"red\">$Entry</font>
          				  </b> est un repertoire<br>";
          
          			ScanDir("$Entry/$Directory");
          
          		}
          		else {
          		if (eregi(".htm",$Entry)) {
          			$MetaTags = get_meta_tags($Directory."/".$Entry);
          
          			if ($MetaTags["robots"] == "all") {
          				$MetaKey = $MetaTags["keywords"];
          
          				$MetaKey = strtoupper($MetaKey);
          
          				echo "Meta($Directory/$Entry): $MetaKey
          \n";
          
          				$MetaTitre = $MetaTags["title"];
          
          				echo "Meta($Directory/$Entry): $MetaTitre
          \n";
          
          			$query = "INSERT INTO search (lien,keyword,titre)
          			VALUES(\"$Directory/$Entry\",\"$MetaKey\",\"$MetaTitre\")";
          
          			$mysql_result = mysql_query($query) or die ("Erreur
          			de modification de la table par la requete \"$query\"");
          
          			}
          		}
          		}
          	}
          closedir($MyDirectory);
          
          }
          
          $open_basedir=".";
          
          ScanDir(".");
          
          mysql_close();
          
          ?>
          </body>
          </html>
          


          fatal error : cannot redeclare scandir()
      3. Contributeur
        Ben quand tu fais des copier coller et des rajouts, fais les correctement, car je vois pas d'erreurs sur la source...
        1. Un simple copier collé je ne vois pas trop comment j'aurais pu me tromper mais enfin la fatigue aidant j'ai du perdre le fil à un moment.
          J'ai corrigé et maintenant
          fatal error : cannot redeclare scandir()
      4. Merci de ton aide, encore qu'étant totalement débutant j'aurais bien aimé savoir où il manquait une accolade.
        Quand à l'indentation des codes le modèle je l'ai copié est ici : https://www.commentcamarche.net/contents/801-php-creer-un-moteur-de-recherche
        je pensais récupérer quelque chose de clean.
        1. Contributeur
          Tu devrais faire des efforts sur l'indentation de tes codes. Tu y verrais plus clair...
          Il manque un accolade fermante.

          PS : la prochaine fois, copies colles tes erreurs dans Google. Dans 99,99% des cas,tu as la solution.

          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
          <html xmlns="http://www.w3.org/1999/xhtml">
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
          <title>Indexation du site</title>
          </head>
          <body>
          <?php
          echo "
          <p>\n
          <table BGCOLOR=\"#EFF2FB\" BORDER=\"0\"
          							CELLSPACING=\"0\"
          							CELLPADDING=\"1\"
          							WIDTH="%">\n
          <tr><td>\n
          <a name=\"index\"><h2>Indexation du site en cours</h2></a>\n
          </td></tr>\n
          </table>\n
          <p>\n";
          $host = "localhost";
          $bdd = "moteur06";
          /* Connexion avec MySQL */
          mysql_connect($host,$user,$password) or die ("Impossible de se connecter
          au serveur de base de donnees");
          mysql_select_db(moteur06) or die ("Impossible d'accéder à la base moteur06");
          $query = "DELETE FROM search";
          mysql_query($query) or die ("Erreur de modification de la table");
          
          function ScanDir($Directory)
          {
          	$MyDirectory = opendir($Directory);
          	while($Entry = readdir($MyDirectory)) 
          	{
          		echo "<br>entry= $Entry<br>";
          		echo "repertoire= $Directory<br>";
          		echo "chemin= $Directory/$Entry<br>";
          		if(is_dir(Entry)&& $Entry != "." && $Entry != "..") 
          		{
          			echo "<b><font color=\"red\">$Entry</font>
          				  </b> est un repertoire<br>";
          			ScanDir("$Entry/$Directory");
          		}
          		else 
          		{
          			if (eregi(".htm",$Entry)) 
          			{
          			$MetaTags = get_meta_tags($Directory."/".$Entry);
          				if ($MetaTags["robots"] == "all") 
          				{
          					$MetaKey = $MetaTags["keywords"];
          					$MetaKey = strtoupper($MetaKey);
          					echo "Meta($Directory/$Entry): $MetaKey\n";
          					$MetaTitre = $MetaTags["title"];
          					echo "Meta($Directory/$Entry): $MetaTitre\n";
          					$query = "INSERT INTO search (lien,keyword,titre)
          					VALUES(\"$Directory/$Entry\",\"$MetaKey\",\"$MetaTitre\")­­";
          					$mysql_result = mysql_query($query) or die ("Erreur
          					de modification de la table par la requete \"$query\"");
          				}
          			}
          		}
          	}
          	closedir($MyDirectory);
          	echo "OK close dir";
          }
          open_basedir(".");
          $ScanDir=(".");
          mysql_close();
          ?>
          </body>
          </html>


          et il doit y avoir une erreur ici :
          open_basedir(".");
          $ScanDir=(".");

          Car $ScanDir n'existe pas. mais la fonction scandir existe.
          car open_basedir est un param de config de php.ini , pas une fonction php
          1. La ligne 93 c'était juste un espace désolé, en fait en virant cet espace, j'ai le même message mais en ligne 92 qui est la dernière du code.
            1. Contributeur
              dans le script que tu donnes :

              1) il n'y a pas de ligne 93

              2) ni de variable $end.

              merci de donner le bon code...
              1. Là ce devrait être bon !
                <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                <html xmlns="http://www.w3.org/1999/xhtml">
                <head>
                <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
                <title>Indexation du site</title>
                </head>
                
                <body>
                <?php
                echo "
                <p>\n
                <table BGCOLOR=\"#EFF2FB\" BORDER=\"0\"
                							CELLSPACING=\"0\"
                							CELLPADDING=\"1\"
                							WIDTH="%">\n
                <tr><td>\n
                <a name=\"index\"><h2>Indexation du site en cours</h2></a>\n
                </td></tr>\n
                </table>\n
                <p>\n";
                
                $host = "localhost";
                
                $bdd = "moteur06";
                
                /* Connexion avec MySQL */
                mysql_connect($host,$user,$password) or die ("Impossible de se connecter
                au serveur de base de donnees");
                
                mysql_select_db(moteur06) or die ("Impossible d'accéder à la base moteur06");
                
                $query = "DELETE FROM search";
                
                mysql_query($query) or die ("Erreur de modification de la table");
                
                function ScanDir($Directory){
                $MyDirectory = opendir($Directory);
                
                	while($Entry = readdir($MyDirectory)) {
                		echo "<br>entry= $Entry<br>";
                
                		echo "repertoire= $Directory<br>";
                
                		echo "chemin= $Directory/$Entry<br>";
                
                		if(is_dir(Entry)&& $Entry != "." && $Entry != "..") {
                			echo "<b><font color=\"red\">$Entry</font>
                				  </b> est un repertoire<br>";
                
                			ScanDir("$Entry/$Directory");
                
                		}
                		else {
                		if (eregi(".htm",$Entry)) {
                			$MetaTags = get_meta_tags($Directory."/".$Entry);
                
                			if ($MetaTags["robots"] == "all") {
                				$MetaKey = $MetaTags["keywords"];
                
                				$MetaKey = strtoupper($MetaKey);
                
                				echo "Meta($Directory/$Entry): $MetaKey
                \n";
                
                				$MetaTitre = $MetaTags["title"];
                
                				echo "Meta($Directory/$Entry): $MetaTitre
                \n";
                
                			$query = "INSERT INTO search (lien,keyword,titre)
                			VALUES(\"$Directory/$Entry\",\"$MetaKey\",\"$MetaTitre\")­";
                
                			$mysql_result = mysql_query($query) or die ("Erreur
                			de modification de la table par la requete \"$query\"");
                
                			}
                		}
                		}
                	}
                closedir($MyDirectory);
                
                echo "OK close dir";
                
                open_basedir(".");
                
                $ScanDir=(".");
                
                mysql_close();
                
                ?>
                </body>
                </html>
                

                Merci
                1. Contributeur
                  Merci d'utiliser la BALISE CODE <> !!

                  4eme en partant de la gauche
                  1. oui en effet je n'avais copié que la partie PHP, pour la balise code j'étais pas au courant, merci d'avance
                    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                    <html xmlns="http://www.w3.org/1999/xhtml">
                    <head>
                    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
                    <title>Indexation du site</title>
                    </head>
                    
                    <body>
                    <?php
                    echo "
                    <p>\n
                    <table BGCOLOR=\"#EFF2FB\" BORDER=\"0\"
                    							CELLSPACING=\"0\"
                    							CELLPADDING=\"1\"
                    							WIDTH="%">\n
                    <tr><td>\n
                    <a name=\"index\"><h2>Indexation du site en cours</h2></a>\n
                    </td></tr>\n
                    </table>\n
                    <p>\n";
                    
                    $host = "localhost";
                    
                    $bdd = "moteur06";
                    
                    /* Connexion avec MySQL */
                    mysql_connect($host,$user,$password) or die ("Impossible de se connecter
                    au serveur de base de donnees");
                    
                    mysql_select_db(moteur06) or die ("Impossible d'accéder à la base moteur06");
                    
                    $query = "DELETE FROM search";
                    
                    mysql_query($query) or die ("Erreur de modification de la table");
                    
                    function ScanDir($Directory){
                    $MyDirectory = opendir($Directory);
                    
                    	while($Entry = readdir($MyDirectory)) {
                    		echo "<br>entry= $Entry<br>";
                    
                    		echo "repertoire= $Directory<br>";
                    
                    		echo "chemin= $Directory/$Entry<br>";
                    
                    		if(is_dir(Entry)&& $Entry != "." && $Entry != "..") {
                    			echo "<b><font color=\"red\">$Entry</font>
                    				  </b> est un repertoire<br>";
                    
                    			ScanDir("$Entry/$Directory");
                    
                    		}
                    		else {
                    		if (eregi(".htm",$Entry)) {
                    			$MetaTags = get_meta_tags($Directory."/".$Entry);
                    
                    			if ($MetaTags["robots"] == "all") {
                    				$MetaKey = $MetaTags["keywords"];
                    
                    				$MetaKey = strtoupper($MetaKey);
                    
                    				echo "Meta($Directory/$Entry): $MetaKey
                    \n";
                    
                    				$MetaTitre = $MetaTags["title"];
                    
                    				echo "Meta($Directory/$Entry): $MetaTitre
                    \n";
                    
                    			$query = "INSERT INTO search (lien,keyword,titre)
                    			VALUES(\"$Directory/$Entry\",\"$MetaKey\",\"$MetaTitre\")";
                    
                    			$mysql_result = mysql_query($query) or die ("Erreur
                    			de modification de la table par la requete \"$query\"");
                    
                    			}
                    		}
                    		}
                    	}
                    closedir($MyDirectory);
                    
                    echo "OK close dir";
                    
                    open_basedir(".");
                    
                    $ScanDir=(".");
                    
                    mysql_close();
                    
                    ?>
                    </body>
                    </html>
                    
                    1. Contributeur
                      dans le script que tu donnes, il n'y a pas de ligne 93, ni de variable $end.
                      merci de donner le bon code...

                      et d'UTILISER la BALISE CODE disponible pour formater les messages.