Moteur de recherche interne php sans bdd
Résolu
Dartha
-
tts-01 -
tts-01 -
Bonjour,
Je cherche en ce moment a faire un moteur de recherche interne sans utiliser de base de données en php.
Tout fonctionne très bien sauf quand il y a plus d'un mot, j'aimerai que la recherche s'effectue avec l'opérateur logique ou dès qu'il y a plus d'un mot. Je ne vois pas comment faire sans un switch mais c'est pas du tout pratique, avez-vous une idée ?
Voici mon code :
<?php
echo "<strong>Votre recherche : </strong>". $search."<br/><br/>";
$resultat=0;
if(strlen($search) <=3)
{
echo "Merci de rentrez un mot de plus de 3 caractères";
}
else
{
if($dossier = opendir('./pages/'))
{
while($fichier = readdir($dossier))
{
if($fichier != '.' && $fichier != '..')
{
// début balise pour effecuter la recherche en fonction du nb de mots
$contenu= file_get_contents('./pages/'.$fichier,FILE_USE_INCLUDE_PATH);
if (preg_match("/.".$search."/i", $contenu))
{
$resultat++;
preg_match('/\<title>(.+)\<\/title\>/Ui',$contenu,$titre);
echo '<strong>Titre de la page : </strong>'.$titre[1]. '<br/>';
// Récuperer uniquement contenu entre <body> et </body>
preg_match('#<body>(.+)</body>#isU', $contenu, $resume_preg);
$resume=strip_tags($resume_preg[1]);
echo '<font color="red"><strong>Contenu entier de la page : </strong></font>'.resume_mots($resume).'<br/>';
echo '<a href="./pages/' . $fichier . '">' . $fichier . '</a><br/>';
echo '---------------------------------------------------------------------------------<br/><br/>';
}
}
}
if($resultat==0)
{
echo "<strong>Aucun résultat trouvé, réessayer avec d'autres mots clés</strong><br/>";
}
echo '<br />';
echo 'Il y a <strong>' . $resultat .'</strong> résultat(s) à votre recherche';
closedir($dossier);
}
else
echo 'Erreur interne lors de la recherche';
}
?>
Je cherche en ce moment a faire un moteur de recherche interne sans utiliser de base de données en php.
Tout fonctionne très bien sauf quand il y a plus d'un mot, j'aimerai que la recherche s'effectue avec l'opérateur logique ou dès qu'il y a plus d'un mot. Je ne vois pas comment faire sans un switch mais c'est pas du tout pratique, avez-vous une idée ?
Voici mon code :
<?php
echo "<strong>Votre recherche : </strong>". $search."<br/><br/>";
$resultat=0;
if(strlen($search) <=3)
{
echo "Merci de rentrez un mot de plus de 3 caractères";
}
else
{
if($dossier = opendir('./pages/'))
{
while($fichier = readdir($dossier))
{
if($fichier != '.' && $fichier != '..')
{
// début balise pour effecuter la recherche en fonction du nb de mots
$contenu= file_get_contents('./pages/'.$fichier,FILE_USE_INCLUDE_PATH);
if (preg_match("/.".$search."/i", $contenu))
{
$resultat++;
preg_match('/\<title>(.+)\<\/title\>/Ui',$contenu,$titre);
echo '<strong>Titre de la page : </strong>'.$titre[1]. '<br/>';
// Récuperer uniquement contenu entre <body> et </body>
preg_match('#<body>(.+)</body>#isU', $contenu, $resume_preg);
$resume=strip_tags($resume_preg[1]);
echo '<font color="red"><strong>Contenu entier de la page : </strong></font>'.resume_mots($resume).'<br/>';
echo '<a href="./pages/' . $fichier . '">' . $fichier . '</a><br/>';
echo '---------------------------------------------------------------------------------<br/><br/>';
}
}
}
if($resultat==0)
{
echo "<strong>Aucun résultat trouvé, réessayer avec d'autres mots clés</strong><br/>";
}
echo '<br />';
echo 'Il y a <strong>' . $resultat .'</strong> résultat(s) à votre recherche';
closedir($dossier);
}
else
echo 'Erreur interne lors de la recherche';
}
?>
A voir également:
- Moteur de recherche interne php sans bdd
- Copernic moteur de recherche - Télécharger - Navigateurs
- Google moteur de recherche page d'accueil - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Le fichier pdf à télécharger est disponible avec le même nom sur le site de bell canada. mais vous ne le trouverez pas directement avec un moteur de recherche… quelle est l’url de ce fichier pdf sur le site web de bell canada ? - Forum Réseaux sociaux
- Copiez la ligne qui indique aux moteurs de recherche de ne pas référencer la page ✓ - Forum Référencement
3 réponses
Tu pourrais préparer la string de recherche que tu utilise pour ton preg_match ($search).
Tu fais par exemple un str_replace(' ','|',$search) qui remplace tous les espace par une barre verticale, qui dans les regex veut dire 'ou'. Ensuite tu balance le tout dans le preg_match et si ta regex est bien formée ça recherche le premier mot clé ou le deuxième mot clé.
Tu trouveras plus d'infos sur les regex ici : https://www.commentcamarche.net/contents/803-php-expressions-regulieres
Tu fais par exemple un str_replace(' ','|',$search) qui remplace tous les espace par une barre verticale, qui dans les regex veut dire 'ou'. Ensuite tu balance le tout dans le preg_match et si ta regex est bien formée ça recherche le premier mot clé ou le deuxième mot clé.
Tu trouveras plus d'infos sur les regex ici : https://www.commentcamarche.net/contents/803-php-expressions-regulieres