$b["nb_occurence"])? -1 : 1; }else{ return ($a["n"]<$b["n"])? -1 : 1; } } // Fonction pour Traiter les accents une fois le code épuré des balises HTML function traitementAccentsHTML($text){ $text = ereg_replace("à","à",$text); $text = ereg_replace("à","à",$text); $text = ereg_replace("â" ,"â",$text); $text = ereg_replace("â" ,"â",$text); $text = ereg_replace("ä" ,"ä",$text); $text = ereg_replace("ä" ,"ä",$text); $text = ereg_replace("æ" ,"ae",$text); $text = ereg_replace("æ" ,"ae",$text); $text = ereg_replace("ç" ,"ç",$text); $text = ereg_replace("ç" ,"ç",$text); $text = ereg_replace("è" ,"è",$text); $text = ereg_replace("è" ,"è",$text); $text = ereg_replace("é" ,"é",$text); $text = ereg_replace("é" ,"é",$text); $text = ereg_replace("ê" ,"ê",$text); $text = ereg_replace("ê" ,"ê",$text); $text = ereg_replace("ë" ,"ë",$text); $text = ereg_replace("ë" ,"ë",$text); $text = ereg_replace("î" ,"î",$text); $text = ereg_replace("î" ,"î",$text); $text = ereg_replace("ï" ,"ï",$text); $text = ereg_replace("ï" ,"ï",$text); $text = ereg_replace("ô" ,"ô",$text); $text = ereg_replace("ô" ,"ô",$text); $text = ereg_replace("ù" ,"ù",$text); $text = ereg_replace("ù" ,"ù",$text); $text = ereg_replace("û" ,"û",$text); $text = ereg_replace("û" ,"û",$text); $text = ereg_replace("®" ,"@",$text); $text = ereg_replace("®" ,"@",$text); $text = ereg_replace(" " ," ",$text); $text = ereg_replace("<" ,"<",$text); $text = ereg_replace("‹" ,"<",$text); $text = ereg_replace(">" ,">",$text); $text = ereg_replace("›" ,">",$text); $text = ereg_replace(""" ,'"',$text); $text = ereg_replace(""" ,'"',$text); $text = ereg_replace("$" ,"$",$text); $text = ereg_replace("&" ,"&",$text); $text = ereg_replace("&" ,"&",$text); $text = ereg_replace("'" ,"'",$text); $text = ereg_replace("™" ,"TM",$text); $text = ereg_replace("™" ,"TM",$text); $text = ereg_replace("œ" ,"oe",$text); $text = ereg_replace("œ" ,"oe",$text); $text = ereg_replace("’" ,"'",$text); // Plus générale pour les accents farfelues ;-) $text = ereg_replace("&(.)[^;]*;","\\1",$text); return $text; } // Fonction filtre pour les différents formats function filtre($text,$type){ if ($type == "html" || $type == "htm"){ // On ajoute des espaces où il en faut $text = str_replace(""," ",$text); $text = eregi_replace(""," ",$text); $text = strip_tags($text); $text = traitementAccentsHTML($text); $text = ereg_replace("[[:space:]][[:space:]]+", " ", $text); } else if ($type == "txt"){ #rien }else{ # ??? } return $text; } // Fonction de recherche pour un mot // argument : le mot, l'url du répertoire à traiter, la configuration $conf et le nb_now : nombre de pages déjà trouvées (0 au départ) function recherche($search,$url,$nb_now,$n) { global $conf; global $tb_resultat; $nb=$nb_now; $rep = opendir("$url"); $search = trim($search); if ($search == ""){ return 0; } while($dir = readdir($rep)) { // On exclue les répertoire . et .. if ($dir == "." || $dir == "..") continue; // si c'est un sous-répertoire, on continue récursivement if(is_dir("$url$dir/")){ $nb = recherche($search,$url.$dir."/",$nb,$n); } // Pas la bonne extension if(! verifierExt($dir,$conf["ext"])) continue; if(!($fichier = file($url.$dir))) { // Impossible de lire le fichier echo ""; continue; }else { // Mise en forme du texte sur lequel on bosse $text = implode($fichier, " "); $textinit=$text; // On filtre en fonction de l'extension $text=filtre($text,ereg_replace(".*\.([^\.])","\\1",$dir)); if($conf["is_casesensitive"]){ $text2=$text; $search2=$search; }else{ // On passe le texte en minuscule $text2 =strtolower($text); $search2 = strtolower($search); } $size = strlen($text); // Récupération du titre si c'est du html $debut_titre = strpos($textinit, "") + 7; $fin_titre = strpos($textinit, ""); $longueur = $fin_titre - $debut_titre; if ($fin_titre != "" && $longueur != 0) { $title = substr($textinit, $debut_titre, $longueur); if(trim($title)== "") $title = $dir; } else { // On essaye avec TITLE $debut_titre = strpos($textinit, "") + 7; $fin_titre = strpos($textinit, ""); $longueur = $fin_titre - $debut_titre; if ($fin_titre != "" && $longueur != 0) { $title = substr($textinit, $debut_titre, $longueur); if(trim($title)== "") $title = $dir; }else{ // Sinon, titre = nom du fichier $title = $dir; } } $pos = 0; $occurence = 0; $encore=1; $description=""; // Les lignes de description while(1){ $resultat = strpos($text2,$search2,$pos); if (!$resultat){ // Plus de résultat dans la page break; } else { // Une occurence de + $occurence++; $newpos = $resultat; //On affiche Le titre si c'est la 1ere occurrence if ($occurence == 1){ $nb++; $description = "".htmlentities(traitementAccentsHTML($title))." :
\n"; } // On affiche les extraits if (($occurence <= $conf["nbreLigne"])){ // Si l'on doit afficher l'extrait (nbre trouvé < nbre à afficher) // On extrait le texte autour du mot $demiExtraitWidth = $conf["extraitWidth"] / 2; $gpos = ($newpos - $demiExtraitWidth < 0) ? 0 : $newpos - $demiExtraitWidth; $dpos = ($gpos + $conf["extraitWidth"] > $size) ? $size : $gpos + $conf["extraitWidth"]; $gpos = ($dpos < $size) ? $gpos : (($dpos - $conf["extraitWidth"] < 1) ? 0 : $dpos - $conf["extraitWidth"]); // On le sort en enlevant les espaces du début $extrait = trim(substr($text, $gpos, $dpos - $gpos)); $ligne = eregi_replace("(".$search.")","\\1",$extrait); if($gpos != 0) $ligne = eregi_replace("^[^ ]* ","",$ligne); // On enlève les mots coupés en bout if($dpos != $size) $ligne = eregi_replace("[^ ]*$","",$ligne); // et en fin $description .= "    ... ".$ligne."...
\n"; // TODO compromis entre avoir le bon nombre d'occurence ou répéter 2 fois ma même chose :( $pos = $dpos; // Position = position de droite // $pos=$newpos+strlen($search); // Juste derrière le 1er résultat } else if(!$conf["is_occurence"]){ // Si on ne veut pas trier par occurence break; } else { // sinon on continue $pos=$newpos+strlen($search); } } } // Fin de la recherche // On stocke le nombre d'occurences if($occurence != 0 ) { $description .= "".htmlentities($conf["web_url"])."/".htmlentities($dir)." "; if ($conf["is_occurence"]){ $description .= " - ".htmlentities($search2)." : $occurence\n"; } } $page=array("n"=>$n,"mot"=>$search,"nb_occurence"=>$occurence,"description"=>$description); if($description != ""){ // On stocke dans le tableau de résultat $tb_resultat[count($tb_resultat)]=$page; // On le mets à la fin du tableau } } } closedir($rep); return $nb; } // Affichage des résultats function afficher($tb_resultat){ global $conf; global $nb_init; // A partir de quel resultat on commence l'affichage usort($tb_resultat,compare); // On tri en fonction du nbre d'occurences while(list($key,$value) = each($tb_resultat)) { if (($key+1) > $nb_init && ($key+1)<=($nb_init+$conf["nbr_par_page"])){ echo "".($key+1).". ".$value['description']."\n

"; } } } // Affiche la barre de navigation entre les pages function choixpage($nb_init,$nb_total,$searchinit) { global $conf; // Boutons previous if($nb_init>0) echo " <<<previous "; $imax= floor(($nb_total-1)/$conf["nbr_par_page"])+1; if ($imax!=1){ for($i=1;$i <= $imax;$i++){ if($nb_init == (($i-1)*$conf["nbr_par_page"])){ echo " $i "; } else { echo " $i "; } } } // Bouton next if($nb_init+$conf["nbr_par_page"]<$nb_total) echo " next>>> "; echo "
\n"; } //************************************************************************** //****************************************** Début du code ***************** if (!(isset($search) && $search != "") || $conf["is_header"]) { // Le Formulaire echo "SEIFT


Entrez le mot que vous souhaitez rechercher :

Respecter les majuscules/minuscules
"; } if (isset($search) && $search != "") { // Si le champ "recherche" a été rempli // On enlève les espaces de fin et début $search=rawurldecode($search); $searchinit=$search; $search=trim($search); // Si il y a plusieurs mots ? $mots = split("[' ]",$search,100); // initialisation du nbre de fois que le mot a été trouvé $nb = 0; // Chrono ? $seconde0=date("U"); // Recherche sur tout $nb = recherche($search,$conf["url"],0,0); // Recherche sur chaque mot si plus d'un mot if (count($mots) > 1){ for($i=0; $i < count($mots); $i++){ $monMot = $mots[$i]; // On supprime les mots de liaisons usuels if (preg_match("/^((.)|(..)|(les)|(une)|(des))$/",$monMot)){ // Rien }else { $nb = recherche($monMot,$conf["url"],$nb,$i+1); } } } $nb_total = $nb; $seconde1=date("U"); $temps= ($seconde1-$seconde0); if (isset($tb_resultat) || $tb_resultat != "") { echo "
"; echo "$nb_total pages trouvées en $temps secondes

\n"; choixpage($nb_init,$nb_total, $searchinit); echo "
\n"; if (isset($tb_resultat) || $tb_resultat != "") afficher($tb_resultat); choixpage($nb_init,$nb_total, $searchinit); }else{ echo " Nous sommes désolés mais aucune page ne correspond à votre recherche
\n
\n"; } } echo "
";