//------------------------------------------------------------------------------
// Page PHP, pour un petit moteur de recherche
// Tedheu, vendredi 13 juillet 2007, version 2
// Ce fichier php doit être placé dans le répertoire racine de l'arborescence
// de répertoires dans lesquels la recherche s'effectura
// Ce petit moteur permet de retrouver et de visualiser (un lien est créé),
// les fichiers (nom et emplacement) qui contiennent le mot-clef
// (sans tenir compte de la casse des caractères).
// les lignes où le mot-clef sont affichées en mode texte (par simplification
// les codes source sont affichés tel quel.)
//------------------------------------------------------------------------------
// initialisation
// extensions des fichiers dans lesquels la recherche s'effectura
$Extens= array("txt","html","htm","php","php3");
// interdictions de chercher dans certains répertoires, définis par leur nom
// (valable pour tout leur contenu, fichiers + sous-répertoires)
$MasqDo= array("secret");
?>
Moteur de recherche
TTU©2007 (version 2)
// Ouverture de la boucle de traitement, si recherche lancée et requete non vide
if (isset($cherche) and (!$requete=="")){
// traitement de la requête
$req_loweracc= strtolower($requete);
$trans = get_html_translation_table(HTML_ENTITIES);
$req_lower = strtr($req_loweracc, $trans);
$occurrence=0;
?>
![]() |
recherche echo $requete ?> |
|
// initialisation du parcours des fichiers
$niveau=0;
$Noeud[0]=".";
$Liste[0]="*";
do {
// lecture du contenu du dossier courant, niveau= $niveau
// correspondant au noeud de nom $Noeud[$niveau]
// résultat > dossiers dans $Doss (de 0 à $ndoss) et fichiers dans $Fich (de 0 à $nfich)
$chemin="";
for ($i=0;$i<=$niveau;$i++){
$chemin=$chemin.$Noeud[$i]."/";
}
if ($niveau==0)$chemin=".";
$dp=opendir($chemin); $ndoss=-1; $nfich=-1;
while (gettype($file=readdir($dp))!=boolean){
// masquage des répertoires interdits (et leurs sous-répertoires)
if (in_array($file,$MasqDo))$file="?";
if ($file!="." and $file!=".." and $file!="?"){
if (is_dir("$chemin/$file"))$Doss[++$ndoss]=$file;
if (is_file("$chemin/$file"))$Fich[++$nfich]=$file;
}
}
closedir($dp);
// y a t-il un dossier qui n'a pas été exploré ?
$new="";
for ($i=0;$i<=$ndoss;$i++){
if (!strstr($Liste[$niveau],"*".$Doss[$i]."*")){
$new=$Doss[$i];
break;
}
}
if ($new!=""){
// si oui on descend dans ce dossier $new
$Liste[$niveau]=$Liste[$niveau].$new."*";
$niveau++;
$Noeud[$niveau]=$new;
$Liste[$niveau]="*";
}
else {
// si non on traite les fichiers puis on remonte
// chemin du répertoire= $chemin, liste des fichiers= tableau $Fich[]
if (!($nfich<0)){
for ($i=0;$i<=$nfich;$i++){
$nomfch=$Fich[$i];
// gestion des extensions
$ext="";
$ok= strrpos($nomfch, '.');
// pas d'extension $ok = false
// pas de nom comme .htaccess, $ok = 0
// attention si ok=0 même chose que ok=false pour un test if (!$ok)
if ($ok>=0) $ext = strtolower(substr($nomfch, strrpos($nomfch, '.')+1));
(in_array($ext,$Extens))? $ook=1: $ook=0;
// le fichier a une extension permise
if ($ook==1){
// lecture du fichier
$Lignefch=file($chemin."/".$nomfch);
$flag=false;
// recherche d'une occurence de la requête, quelquesoit la casse, ligne par ligne
for ($ilgn=0;$ilgn\n";
if (!$flag){
$flag=true;
print "-------------
\n";
print "$chemin/$nomfch \n";
print "(dossier: $chemin \n";
print "fichiers: $nomfch )
\n";
}
$req_courant=substr($ligne,0,strlen($req_lower));
$texte=htmlspecialchars($Lignefch[$ilgn]);
$texte=StripSlashes(nl2br($texte));
$texte=str_replace($req_courant,"$req_courant",$texte);
print "ligne $ilgn : $texte\n";
print "\n";
$occurrence++;
}
}
}
}
}
// après traitement, on remonte au niveau supérieur
$niveau--;
}
}
while ($niveau>=0);
?>
if ($occurrence==0){
print "
\n";
print "Recherche infructueuse ... pas de résultat\n";
}
// Fermeture de la boucle de traitement,
}
?>