par
patlecou » 09 mars 2007, 01:09
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(
"à"=>"à",
"á"=>"á",
"â"=>"â",
"ã"=>"ã",
"ä"=>"ä",
"å"=>"å",
"æ"=>"æ",
"ç"=>"ç",
"è"=>"è",
"é"=>"é",
"ê"=>"ê",
"ë"=>"ë",
"î"=>"î",
"ï"=>"ï",
"ô"=>"ô",
"ö"=>"ö",
"ù"=>"ù",
"ú"=>"ú",
"û"=>"û",
"ü"=>"ü",
"&"=>"&",
);
// 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(" "," ",$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]
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:
[php]<?
// 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(
"à"=>"à",
"á"=>"á",
"â"=>"â",
"ã"=>"ã",
"ä"=>"ä",
"å"=>"å",
"æ"=>"æ",
"ç"=>"ç",
"è"=>"è",
"é"=>"é",
"ê"=>"ê",
"ë"=>"ë",
"î"=>"î",
"ï"=>"ï",
"ô"=>"ô",
"ö"=>"ö",
"ù"=>"ù",
"ú"=>"ú",
"û"=>"û",
"ü"=>"ü",
"&"=>"&",
);
// 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(" "," ",$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");
?>[/php]
En message erreur, quand je lance le script j'ai ceci:
[code]
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
[/code]
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]