Page 1 sur 1

Notice: Undefined index

Posté : 09 mars 2007, 01:09
par patlecou
Bonjour,
J'essaie depuis un bon moment de trouver un script moteur de recherche interne de mots dans un site.
Le script fonctionne bien et affiche des resultats quand il y en a.
Mais, juste avant, il me renvoie des lignes d'erreur:

Voici le code PHP du moteur:
<? 

// On adapte les variables selon la version de PHP 
$version_de_php=phpversion(); 
$version_de_php=str_replace(".","",$version_de_php); 
if($version_de_php>=410){ 
   $action = $_GET['action']; 
   $blork = $_GET['blork']; 
   $start = $_GET['start']; 
   $multi = $_GET['multi']; 
} 

// Liste des codes htmls spéciaux 
$caractere_special=array(
"&agrave;"=>"à",
"&aacute;"=>"á",
"&acirc;"=>"â",
"&atilde;"=>"ã",
"&auml;"=>"ä",
"&aring;"=>"å",
"&aelig;"=>"æ",
"&ccedil;"=>"ç",
"&egrave;"=>"è",
"&eacute;"=>"é",
"&ecirc;"=>"ê",
"&euml;"=>"ë",
"&icirc;"=>"î",
"&iuml;"=>"ï",
"&ocirc;"=>"ô",
"&ouml;"=>"ö",
"&ugrave;"=>"ù",
"&uacute;"=>"ú",
"&ucirc;"=>"û",
"&uuml;"=>"ü",
"&"=>"&",
); 

// On fait les includes de base 

require("blork_engine_config.php"); 
include("blork_engine_haut.html"); 
$version="0.23b"; 

// Variables par défaut 

if($maxmots==""){ $maxmots="20"; } 
if($maxipage==""){ $maxipage="20"; } 
if($start=="" || $start=="0" ){ $start="1"; } 
$longueur_blork=strlen($blork); 
$blork=trim($blork); 
$blork=ereg_replace(" +", " ", $blork); 
$blork2=htmlspecialchars($blork); 

$form_recherche="<form method=GET><br>Nouvelle recherche :<br>
<input type=hidden value=\"go\" name=action>
<input type=text value=\"$blork2\" maxlength=50 size=25 name=blork>
<input type=submit value='Blork !'><br>
</form>"; 

?>


<TITLE>
Recherche de <? echo($blork2); ?> - Powered By a Blork Engine
</TITLE>


<?php 

// On vérifie que la recherche est correctement lancée 

if($action!="go"){ echo("$form_recherche"); 
include("blork_engine_bas.html"); 
exit(); } 

// On vérifie la longueur de la recherche 

if($longueur_blork<3){ 
echo("Votre recherche doit comporter au moins trois caractères.<br> $form_recherche"); 
include("blork_engine_bas.html"); 
exit(); } 

// Résultats à 0 
$compteresultats="0"; 
$zetotal="0"; 

// Scan des sous dossiers sur 10 niveaux si on l'a activé 
// On vérifie les sous-dossiers à scanner uniquement ici
// Ensuite on les rajoute à la liste 
// Comme ça après on n'aura plus qu'a faire un scan classique 
// Sur tous les dossiers de la liste 

if($scan_sousdos=="on"){ 

$encore1=array(); 
$encore2=array(); 

foreach($dossier as $nomdos=>$d){ 

// Sous-dossier 1 

$fp=opendir("$d");  
while($file = readdir($fp)){ 
if($file!='.' && $file!='..'){ 	
$verif=$d."/".$file; 
if(is_dir($verif) && !(in_array($verif, $dossier)) && !(in_array($verif, $exclu))){ 

$dossier[]="$verif"; 
$encore1[]="$verif"; 

}}} closedir($fp);  
unset($fp); unset($nomdos); } 


// Sous-dossier 2 

foreach($encore1 as $nom_du_soudos=>$le_soudos){ 
$fp=opendir("$le_soudos");  
while($file = readdir($fp)){ 
if($file!='.' && $file!='..'){ 	
$verif=$le_soudos."/".$file; 
if(is_dir($verif) && !(in_array($verif, $dossier)) && !(in_array($verif, $exclu))){ 

$dossier[]="$verif"; 
$encore2[]="$verif"; 

}}} 
closedir($fp); 
unset($fp,$nom_du_soudos,$le_soudos); 
$encore1=array(); } 


// Sous-dossier 3 

foreach($encore2 as $nom_du_soudos=>$le_soudos){ 
$fp=opendir("$le_soudos");  
while($file = readdir($fp)){ 
if($file!='.' && $file!='..'){ 	
$verif=$le_soudos."/".$file; 
if(is_dir($verif) && !(in_array($verif, $dossier)) && !(in_array($verif, $exclu))){ 

$dossier[]="$verif"; 
$encore1[]="$verif"; 

}

}} 
closedir($fp);  
unset($fp,$nom_du_soudos,$le_soudos); 
$encore2=array(); } 


// Sous-dossier 4 

foreach($encore1 as $nom_du_soudos=>$le_soudos){ 

$fp=opendir("$le_soudos");  
while($file = readdir($fp)){ 
if($file!='.' && $file!='..'){ 	
$verif=$le_soudos."/".$file; 
if(is_dir($verif) && !(in_array($verif, $dossier)) && !(in_array($verif, $exclu))){ 

$dossier[]="$verif"; 
$encore2[]="$verif"; 

}}} 
closedir($fp);  
unset($fp,$nom_du_soudos,$le_soudos); 
$encore1=array(); } 


// Sous-dossier 5 

foreach($encore2 as $nom_du_soudos=>$le_soudos){ 
$fp=opendir("$le_soudos");  
while($file = readdir($fp)){ 
if($file!='.' && $file!='..'){ 	
$verif=$le_soudos."/".$file; 
if(is_dir($verif) && !(in_array($verif, $dossier)) && !(in_array($verif, $exclu))){ 

$dossier[]="$verif"; 
$encore1[]="$verif"; 

}}} 
closedir($fp);  
unset($fp,$nom_du_soudos,$le_soudos); 
$encore2=array(); } 


// Sous-dossier 6 

foreach($encore1 as $nom_du_soudos=>$le_soudos){ 
$fp=opendir("$le_soudos");  
while($file = readdir($fp)){ 
if($file!='.' && $file!='..'){ 	
$verif=$le_soudos."/".$file; 
if(is_dir($verif) && !(in_array($verif, $dossier)) && !(in_array($verif, $exclu))){ 

$dossier[]="$verif"; 
$encore2[]="$verif"; 

}}} 
closedir($fp);  
unset($fp,$nom_du_soudos,$le_soudos); 
$encore1=array(); } 


// Sous-dossier 7 

foreach($encore2 as $nom_du_soudos=>$le_soudos){ 
$fp=opendir("$le_soudos");  
while($file = readdir($fp)){ 
if($file!='.' && $file!='..'){ 	
$verif=$le_soudos."/".$file; 
if(is_dir($verif) && !(in_array($verif, $dossier)) && !(in_array($verif, $exclu))){ 

$dossier[]="$verif"; 
$encore1[]="$verif"; 

}}} 
closedir($fp);  
unset($fp,$nom_du_soudos,$le_soudos); 
$encore2=array(); } 


// Sous-dossier 8 

foreach($encore1 as $nom_du_soudos=>$le_soudos){ 
$fp=opendir("$le_soudos");  
while($file = readdir($fp)){ 
if($file!='.' && $file!='..'){ 	
$verif=$le_soudos."/".$file; 
if(is_dir($verif) && !(in_array($verif, $dossier)) && !(in_array($verif, $exclu))){ 

$dossier[]="$verif";  
$encore2[]="$verif"; 

}}} 
closedir($fp);  
unset($fp,$nom_du_soudos,$le_soudos); 
$encore1=array(); } 


// Sous-dossier 9 

foreach($encore2 as $nom_du_soudos=>$le_soudos){ 
$fp=opendir("$le_soudos");  
while($file = readdir($fp)){ 
if($file!='.' && $file!='..'){ 	
$verif=$le_soudos."/".$file; 
if(is_dir($verif) && !(in_array($verif, $dossier)) && !(in_array($verif, $exclu))){ 

$dossier[]="$verif"; 
$encore1[]="$verif"; 

}}} 
closedir($fp);  
unset($fp,$nom_du_soudos,$le_soudos); } 


// Sous-dossier 10 

foreach($encore1 as $nom_du_soudos=>$le_soudos){ 
$fp=opendir("$le_soudos");  
while($file = readdir($fp)){ 
if($file!='.' && $file!='..'){ 	
$verif=$le_soudos."/".$file; 
if(is_dir($verif) && !(in_array($verif, $dossier)) && !(in_array($verif, $exclu))){ 

$dossier[]="$verif"; 

}}} 
closedir($fp);  
unset($fp,$nom_du_soudos,$le_soudos,$encore1,$encore2); 
}} 

// Passage en minuscules de la recherche
$blork=strtolower($blork); 

// Maintenant on lance le scan classique sur les dossiers de la liste 
// Les sous-dossiers ont été rajoutés au besoin par la fonction précédente 

foreach($dossier as $nomdos=>$d){ 

 
// Sésame ouvre toi 

$fp=opendir("$d"); 
while($file = readdir($fp)){ 
if($file=="." || $file==".." || is_dir($file)){ continue; } 

// On ne scanne pas les fichiers exclus 
if(in_array($file, $exclu)){ continue; } 

// On récupère l'extension 
// Merci à Frédéric Bouchery pour ce regex :-) 
$ext = ereg_replace('^.*[.]([^.]*)$', '\\1', $file); 

// Sélection des extensions
// On ne scanne que ces types de fichiers 

if(
   $ext!="html" 
&& $ext!="htm" 
&& $ext!="php" 
&& $ext!="php3" 
&& $ext!="txt" 
&& $ext!="php4" 
&& $ext!="gif" 
&& $ext!="jpg" 
&& $ext!="png"){ continue; } 

// Maintenant on est sûr de devoir scanner le fichier
// On peut éxécuter tous les traitements nécessaires

// Détermination du type de fichier 
// On ne vérifiera que le nom des fichiers de type "img" (image) 
// alors que les fichiers de type "normal" seront entièrement retraités 
// car considérés comme contenant du texte lisible par le moteur. 

if($ext=="html" || $ext=="htm" || $ext=="php" || $ext=="php3" || $ext=="txt" || $ext=="php4"){ 
$filetype="normal"; } else{ $filetype="img"; } 

// Maintenant qu'on a déterminé la place de notre fichier entre les deux types 
// On va appliquer des retraitements préliminaires sur les fichiers de type "normal" uniquement 
if($filetype=="normal"){ 

// On ouvre le contenu du fichier    

$recupere_le_fichier=fopen("$d/$file","r"); 
$tout=fread($recupere_le_fichier,500000); 
fclose($recupere_le_fichier); 

// Passage en minuscules 
$tout=strtolower($tout); 

// On vire le html et le php 
$tout=strip_tags($tout,'<title></title><script></script><head></head><style></style>'); 


// On récupère le titre du fichier 
// Ou alors on affiche le nom avec l'extension 
// Puis on supprime le titre pour ne pas fausser les résultats  

if(strpos($tout,"<title>") && strpos($tout,"</title>"))
{ 
$titre1=strstr($tout,'<title>'); 
$titre2=strstr($tout,'</title>'); 
$titre1=str_replace("$titre2","",$titre1); 
$titre1=str_replace("<title>","",$titre1); 
if($titre1==""){ $titre=$file; } else{ $titre=$titre1; }
}  
else{ 
$titre=$file; } 

$titre=strtolower($titre); 
unset($titre1, $titre2); 
$tout = preg_replace('`<title.*?/title>`', '', $tout); 




$tout = str_replace("\n"," ",$tout); 
$tout = str_replace("&nbsp;"," ",$tout); 
$tout = str_replace("  "," ",$tout); 

$tout = preg_replace('`<head.*?/head>`', '', $tout); 
$tout = preg_replace('`<script.*?/script>`', '', $tout); 
$tout = preg_replace('`<style.*?/style>`', '', $tout); 

foreach($caractere_special as $caractere_code=>$caractere_traduction){ 
$tout = str_replace("$caractere_code","$caractere_traduction",$tout); 
$titre = str_replace("$caractere_code","$caractere_traduction",$titre); } 

$zetotal++; 
if($zetotal>9999){ continue 2; } 

// Si on trouve la recherche 
if(strpos("$tout","$blork") || strpos("$file","$blork") || strpos("$titre","$blork")){ 

// Résultats +1 
$compteresultats++; 

// S'il s'agit d'un fichier de type "normal" 
if($filetype=="normal"){ 


$total_mots=intval(substr_count($titre,$blork)*10+$total_mots); 
$total_mots=intval(substr_count($tout,$blork)+$total_mots); 

// On crée la description 

$position=strpos($tout, $blork); 
$start_position=intval($position-50); 
if($start_position<0){ $start_position="0"; } 
$fin_position=intval($longueur_blork+100); 

if($position === FALSE ){ $resume.="Terme exact introuvable dans le contenu du fichier."; } 
else{ 
$resume="... "; 
$resume.=substr($tout, $start_position, $fin_position); 
$resume.=" ... "; 

// On met en gras le terme recherché dans la description 
$resume=str_replace($blork,"<b>$blork2</b>",$resume); }    

} 

// Si c'est une image ou un autre type de fichier 
// On adapte la description  
else{ $resume="Fichier $ext"; } 

// Puis dans le titre 
$titre=str_replace($blork,"<b>$blork2</b>",$titre); 


// Calcul du pourcentage de pertinence 

similar_text($blork, $tout, $p1); 
similar_text($blork, $titre, $p2); 
$p=intval($p1+$p2); 

// Si le pourcentage est supérieur ou égal à 100 on le ramène à 99 
// Et s'il est égal à 0 on le ramène à 1 pour qu'il puisse être réindexé (voir suite) 

if($p>=100){ $p="99"; } 
if($p=="0"){ $p="1"; } 

if($total_mots>=100){ $total_mots="99"; } 
if (strlen($total_mots)==1){ 
$total_mots=str_repeat("0",2-strlen($total_mots)).$total_mots; } 
$total_mots=substr($total_mots, 0, 1); 

// Idem pour les pourcentages 

if (strlen($p)==1){ 
$p=str_repeat("0",2-strlen($p)).$p; } 

// Et enfin le numéro du résultat 

$compteresultats2=$compteresultats; 
if (strlen($compteresultats2)<4){ 
$compteresultats2=str_repeat("0",4-strlen($compteresultats2)).$compteresultats2; } 


// On met la première lettre du titre en majuscules 
$titre=ucfirst($titre); 


// URL par défaut pour les fichiers 

// On vire l'extension si besoin 
if($montre_ext=="off" && $filetype!="img"){ 
$file=str_replace(".$ext","",$file); } 

if($go2url==""){ $go_2_url="$d/$file"; } 
else{ 
$go_2_url="$go2url";
$go_2_url=str_replace("[dossier]",$d,$go_2_url); 
$go_2_url=str_replace("[fichier]",$file,$go_2_url); } 


// Source du résultat 

$src=" <A href=\"$go_2_url\">$titre</A> <br> 
$resume

"; 

// On enregistre 
$zeresults["1".$total_mots."".$p."".$compteresultats2]="$src"; 

// On remet a zéro histoire d'éviter des doublons  
unset(
$compteresultats2,
$tout,
$resume,
$src,
$titre,
$filetype,
$p,
$p1,
$p2,
$file,
$ext,
$total_mots,
$register
); 

}}   



closedir($fp); 
unset($tout,$filetype,$fp,$ext); } 

if($compteresultats>0){ 
krsort($zeresults); 
array_unshift($zeresults,"rien"); } 


if($start=="1" && $compteresultats=="0" ){ $start="0"; } 
$pourvoir=intval($start+$maxipage-1);
if($pourvoir>$compteresultats){ $pourvoir=$compteresultats; } 
$finstart=intval($compteresultats-$maxipage+1); 
$prevbarre=intval($start-$maxipage);
$nextbarre=intval($start+$maxipage); 
$nb_barre="1"; 
$compte_affichage=$start; 


$rs=" résultat trouvé ";
$fich=" fichier"; 
if($compteresultats>1){ $rs=" résultats trouvés "; }
if($zetotal>1){ $fich=" fichiers"; } 


// Maintenant on commence l'affichage 

echo("Résultats de votre recherche pour <b>$blork2</b><br> $compteresultats $rs sur $zetotal $fich - Affichage des résultats $start à $pourvoir");   

if($compteresultats>0){ echo("$form_recherche"); } 


// On sélectionne les éléments du tableau de résultat à afficher et on les lance 

if($compteresultats>0){ 
foreach($zeresults as $key=>$value){ 
if($key>=$start && $key<$nextbarre){ 

echo("<br><br>
$value"); 

$compte_affichage++; }}  }


// Et si on a trop de résultats par rapport au nombre à afficher dans la page on met la barre de navigation 

if($compteresultats>$maxipage){ 

echo("<p align=center><br>"); 

if($start!="1"){ 
echo("<A href=\"engine.php?blork=$blork&action=go&choix=$choix\"><< Début</A> <A href=\"engine.php?blork=$blork&action=go&start=$prevbarre&choix=$choix\">< Page précédente</A> ("); }
else{ echo("<< Début < Page précédente ("); }

for($barre=1;$barre<$compteresultats;){ 
$finbarre=intval($compteresultats-$barre); 
echo(" <A href=\"engine.php?blork=$blork&action=go&start=$barre&choix=$choix\">$nb_barre</A> "); 
$nb_barre++; 
$barre=intval($barre+$maxipage); } 

if($start<$finstart){ echo(") <A href=\"engine.php?blork=$blork&action=go&start=$nextbarre&choix=$choix\">Page suivante ></A> <A href=\"engine.php?blork=$blork&action=go&start=$finstart&choix=$choix\">Fin >></A>"); } 
else{ echo(") Page suivante >  Fin >>"); } 

echo("</p>"); 

} 

if($compteresultats=="0"){ 
echo("<br><center> Votre recherche sur le terme <b>$blork2</b> n'a donné aucun résultat. Essayez d'élargir votre recherche en y mettant moins de mots ou vérifiez son orthographe.</center>"); 
} 
else{ 
echo("<p align=center><br>$compteresultats $rs sur $zetotal $fich.</p>"); } 

echo("$form_recherche"); 

// On met le footer, et c'est fini 
include("blork_engine_bas.html"); 

?>
En message erreur, quand je lance le script j'ai ceci:

Code : Tout sélectionner

Notice: Undefined index: start in c:\program files\easyphp1-8\www\copy of sitenew\pages\engine.php on line 36 Notice: Undefined index: multi in c:\program files\easyphp1-8\www\copy of sitenew\pages\engine.php on line 37 Notice: Undefined variable: maxmots in c:\program files\easyphp1-8\www\copy of sitenew\pages\engine.php on line 72 Notice: Undefined variable: total_mots in c:\program files\easyphp1-8\www\copy of sitenew\pages\engine.php on line 439 Notice: Undefined variable: total_mots in c:\program files\easyphp1-8\www\copy of sitenew\pages\engine.php on line 439 Résultats de votre recherche pour hello 2 résultats trouvés sur 17 fichiers - Affichage des résultats 1 à 2
Si quelqu'un a une reponse a cela, merci beaucoup d'avance, je ne reussis pas a savoir ce que je dois changer dans mes variables, d'autant plus que le script fait la rechrche correctement.
Merci[/code]

Posté : 09 mars 2007, 01:39
par thehawk
cela vient peut etre de la config de ton serveur ... notament de ton php.ini

dans easyphp va dans config php
le document php.ini s'ouvre alors recherche la ligne

error_reporting =

fait bien attention a ne pas avoir de ";" avant la ligne et
modifie la par :
error_reporting = E_PARSE
et voila le tour est joué

Posté : 09 mars 2007, 02:15
par Ryle
Le problème vient d'avantage d'erreurs de déclaration dans le code que d'un mauvais paramétrage du serveur :) :

- à la ligne 35, tu as une virgule pour séparer le dernier élément de ton tableau du suivant, mais comme y a pas de suivant à la ligne 36, ca génère une erreur

- ligne 46, tu testes la variable $maxmots pour voir si elle est vide, mais cette variable n'a pas été définie au préalable (et accessoirement, n'est jamais utilisée par la suite)

- ligne 47, idem pour $maxipage

- ligne 389 : tu ne peux pas utiliser la variable $total_mots alors que tu es en train de la définir

A revoir également ligne 6 : si $version_de_php < 410, alors tes 4 variables ne seront pas définies. Par ailleurs, un test pour vérifier que les variables que tu récupères en GET sont bien définies (isSet()) avant de les utiliser ne me semble pas superflue.