Passer au contenu

Créez un moteur de recherche en PHP pour votre site web

Le moteur de recherche est aujourd’hui l’un des outils essentiels d’un site web. PHP permet d’en créer un pour votre site en moins d’une heure. Il suffit pour cela d’assembler et de modifier des classes existantes disponibles sur des répertoires publics.

Comment créer un moteur de recherche à partir de classes PHP existantes ? Il vous suffit d’utiliser la classe “xmlbasica.lib.php” et son application “bsearch.php” disponibles sur le site PHP Classes ( http://phpclasses.upperdesign.com). “xmlbasica” est une librairie dédiée à la manipulation des documents XML. “bsearch.php“fournit de son côté toutes les fonctions de base pour la recherche de mots clés au sein de pages HTML. En revanche, aucun outil n’est livré en standard pour créer l’index par défaut sur lequel s’appuie “bsearch.php” pour effectuer sa recherche.Nous allons donc créer cette brique de toutes pièces et l’incorporer aux autres modules. Pour cela, connectez-vous tout d’abord sur le site PHP Classes et récupérez les fichiers “xmlbasica.lib.php” ?” qui contiennent toutes les fonctions XML utilisées par bsearch.php pour effectuer la recherche ?” et “bsearch.php“. Copiez ces deux fichiers à la racine de votre site web. Ouvrez ensuite l’index XML “search-db.xml“, l’index livré par défaut avec l’exemple disponible sur le site, pour en étudier la structure. La première étape va consister à écrire le script qui fabriquera automatiquement cet index pour le webmaster.

1 – Récupérez les informations pour l’indexation

La création de l’index est la phase la plus importante puisque toutes les autres fonctions du moteur seront assumées par les fichiers que nous venons de télécharger. Cette première étape consiste à recueillir deux informations de la part du webmaster : le chemin physique des pages à indexer et leur adresse internet. Utilisez un simple formulaire. Stockez le chemin physique dans la variable “repertoire” et l’URL racine dans “path“. Ce formulaire doit poster ses données au moteur chargé de l’indexation. Il s’agit de la prochaine page que vous allez créer : “indexation.php“.

2 – Positionnez-vous dans le répertoire

Une fois ce nouveau fichier créé, relevez la position actuelle du curseur à l’aide de l’instruction “getcwd();” et positionnez-le (s’il y a lieu) dans le répertoire indiqué par l’internaute. Pour cela, vous pouvez utiliser la fonction “ chdir() “.

3 – Listez les sous-répertoires à indexer

Un site comporte généralement plusieurs sous-répertoires que vous aurez à identifier automatiquement avant de procéder au listage des pages HTML. Vérifiez que le répertoire existe bien tout en l’ouvrant à l’aide de la condition “if ($okdir = @opendir($rep))“. Vous devez ensuite dresser la liste à l’aide d’une boucle du type “while“. La condition de cette boucle est du même type que la précédente : tant qu’elle trouve un nouveau fichier elle s’exécute. PHP ne distingue malheureusement pas les commandes propres aux répertoires de celles qui sont propres aux fichiers.C’est pour cette raison que vous devez tester à nouveau le type du fichier que vous venez d’ouvrir à l’aide de la fonction “filetype()“. Cette dernière retourne “dir” pour un répertoire et “file” pour un fichier. Vous ne chercherez donc à stocker que des entrées de type “dir“. Enfin, comme “.” et “..” sont considérés comme des noms de répertoires, il faut également les filtrer. Lorsque le traitement de la boucle est terminé, libérez le curseur à l’aide de “closedir()“.

4 – Construisez la liste des fichiers courants

Ouvrez ensuite chaque répertoire et listez l’ensemble des fichiers qui y sont présents. Vous devez à nouveau filtrer les entrées à l’aide de “filetype()” pour ne prendre en compte que les fichiers. La condition “($entree!=”.” && $entree!=”..”)” rejette les répertoires qui ne nous intéressent pas. Chaque fois qu’un fichier est rencontré par la boucle, elle ajoute une entrée dans la variable “$index“. L’opérateur “.=” ajoute pour sa part des informations à la fin de la variable sans écraser les précédentes. Notez qu’il s’agit du même opérateur de concaténation que lorsque l’on stocke ensemble du texte et des variables dans une même chaîne.La seconde boucle prend ensuite le relais. Elle ferme le répertoire en cours, incrémente le compteur “$i” et passe ainsi au répertoire suivant. Pour que les résultats affichés soient cliquables, vous devez préciser le chemin complet des fichiers. C’est l’objet de la concaténation : “$server.$path.”/”.$entree“.

5 – Ajoutez les fichiers compris dans les sous-répertoires

Cette opération est similaire à l’étape précédente, mais nécessite une petite adaptation. Vous allez utiliser une double boucle imbriquée pour construire cette liste. La première boucle s’appuie sur l’expression “While (list($key, $val) = each($rep2))“. Son objectif est de lister chaque répertoire inscrit dans le tableau “$rep“. Les résultats de ce traitement viennent, bien entendu, s’ajouter à la variable “$index“.

6 – Sauvegardez l’index

Lorsque l’ensemble du traitement est achevé, il ne vous reste qu’à sauvegarder la variable “$index” dans un fichier nommé “search-db.xml“. N’oubliez pas auparavant de vous replacer dans le répertoire d’exécution du script à l’aide de “chdir()“. C’est l’objectif des lignes “$fp = fopen(“search-db.xml”, “w”);”, “fwrite($fp,$index);” et “fclose($fp);“.La première expression crée le fichier et l’ouvre en mode ajout. Il est alors prêt à recevoir la variable “$index” lorsque la fonction “fwrite()” vient l’écrire dedans. La dernière expression ferme enfin le fichier. À ce stade, vous pouvez ouvrir le fichier XML dans votre navigateur pour vérifier la validité de sa structure.

7 – Paramétrez le formulaire de recherche

La page d’accueil du moteur est un simple formulaire. Il s’agit du fichier “index.html” présent dans l’archive que vous avez téléchargée sur PHP Classes. Renommez-le en “index.php” et ajoutez la ligne “” pour inclure les éléments redondants de présentation. Vous devez ensuite passer trois paramètres au Script “bsearch.php“. Le moteur que constitue “bsearch.php” s’appuie sur les expressions régulières. Il parcourt les fichiers un à un en temps réel. Ce mode de recherche n’est donc adapté qu’à des sites comportant un nombre raisonnable de pages.En revanche, vous pouvez facilement l’utiliser pour créer un véritable index à partir d’un dictionnaire. L’approche est alors similaire à celle que nous avons utilisée pour scruter chaque répertoire. Le premier paramètre (NoCharDisp) indique le nombre de caractères à placer avant et après la chaîne recherchée lors de l’affichage des résultats. Le deuxième paramètre (SearchMode) indique au moteur de recherche si l’ensemble des mots clés doivent être recherchés dans leur ordre de saisie ou dans un ordre quelconque.Enfin, “WrdXplicit” (le dernier paramètre) indique au moteur s’il doit rechercher des mots complets ou toutes les expressions contenant la ou les chaînes indiquées par l’internaute.

8 – Affichez les résultats de la recherche

Cette dernière étape est assurée par le fichier “bsearch.php“. Vous pouvez l’éditer pour modifier à loisir la présentation des résultats. Commencez par franciser le texte. Vous pouvez ensuite découper ce fichier en fonctions autonomes pour rendre son utilisation modulaire.
Retrouvez l’intégralité des codes à l’adresse telecharger.01net.com/ip

🔴 Pour ne manquer aucune actualité de 01net, suivez-nous sur Google Actualités et WhatsApp.


Frédéric Bordage