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
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Google moteur de recherche page d'accueil - Guide
- Copernic moteur de recherche - Télécharger - Navigateurs
- Copernic Desktop Search - Télécharger - Utilitaires
- Rechercher ou entrer l'adresse 4 - recherche google ✓ - Forum Réseaux sociaux
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