Script d'indexation
Ce script va vous permettre d'indexer tout votre site dans la BDD, laquelle pourra être utilisée par un moteur de recherche interne., tel que celui expliqué dans ce site.
Le script
Comme d'habitude, on se connecte à la BDD:
$connection = mysql_connect('localhost', 'root', '') or die(mysql_error());
mysql_select_db('my_data_base') or die(mysql_error());
En plus de la connection, j'ai rajouté l'instruction "die" qui s'exécute en cas d'erreur et qui affichera
l'erreur MySQL s'étant produite (s'il y en a eu une).
La première chose à faire, maintenant qu'on est connecté est de vider entièrement la base, puisqu'on va (ré)indexer tout le site.
mysql_query('TRUNCATE TABLE recherche');
Maintenant, nous allons créer une fonction qui va lister tous les fichiers du répertoire de base, les ouvrir,
récupérer le contenu des balises META puis fermer les fichiers. Le seul argument dont elle aura besoin
est le nom du répertoire de base (root) qui est ".".
Un point "." est pour le répertoire courant et deux points ".." est pour le répertoire précédent.
function indexer($repertoire){
Maintenant, nous allons ouvrir le dossier grâce à la fonction "opendir" (open directory = ouvrir repertoire) et,
pour parcourir les fichiers existant dans ledit répertoire, nous allons utiliser "readdir" dans une boucle "while".
$dossier = opendir($repertoire);
//Ouverture du dossier.
while(false !== $fichier = readdir($dossier)){
//Listage des fichiers.
La condition de la boucle signifie "Tant qu'on a pas fini le lister tous les fichiers (readdir et false), on continue".
Il faut maintenant regarder si le fichier est ou non un répertoire (fonction "is_dir"), si oui, vérifier que ce n'est pas le dossier courant (.) ou le dossier qui ramène vers le répertoire précédent (..). Si c'est bien un répertoire, on l'indexer, sinon, on ouvre le fichier.
$chemin_du_fichier = $repertoire.'/'.$fichier;
/*On crée une variable qui contient le chemin du fichier sinon la fonction ne saura pas le tester. (Exemple:
mon_repertoire/sous_repertoire).*/
if(is_dir($chemin_du_fichier) && $fichier !="." && $fichier != ".."){
//Si c'est un dossier normal...
indexer($chemin_du_fichier);
//on l'indexe en le faisant repasser dans la fonction.
}
Si ce n'est pas un dossier, ce ne peut être qu'un fichier. Nous allons donc l'ouvrir et récupérer les
balises META.
else{
//Si ce n'est pas un dossier
if(eregi('.php', $fichier)){
Ici, j'ai demandé à la fonction de n'indexer que les fichiers portant l'extention ".php". Il ne tient
qu'à vous d'en chager.
La fonction preg_match permet de vérifier si l'extention se trouve bien dans le nom du fichier ($fichier).
$nom_complet = $repertoire.'/'.$fichier;
//On met le nom complet du fichier dans une variable pour y voir plus clair.
Maintenant que nous avons créé une variable contenant le nom du fichier, il ne reste plus qu'à l'ouvrir
et à vérifier que le script peut indexer la page (il suffit de regarder si la balise META robots indique ou non "noindex") et récupérer les informations utiles.
$balises_meta = get_meta_tags($nom_complet);
if($balises_meta['robots'] != 'noindex'){
//Si la balise META robots est différente de "noindex".
$meta_description = $balises_meta['description'];
$meta_keywords = $balises_meta['keywords'];
//On récupère les balises META qu'il nous faut.
Nous avons récupéré les balises META grâce à la fonction get_meta_tags qui récupère toutes les balises META
présentes dans la page. Il ne nous reste plus qu'à stocker tout le contenu du fichier dans une variable pour pouvoir récupérer le titre grâce à la fonction eregi() qui sélectionne une partie d'une chaine de
caractères.
$php = file_get_contents($nom_complet);
eregi("<title>(.*)</title>", $php, $titre_temporaire);
$titre = $titre_temporaire[1];
Maintenant que nous avons récupéré toutes les fonctions utiles présentes dans la page, nous allons faire un dernier test pour voir si les balises META sont vides ou pas, puis nous allons
les insérer dans la BDD.
if($meta_description == '' || $meta_keywords == '' || $titre == ''){
echo'Les informations de la page: '.$nom_complet.' ne sont pas complète.<br />
Veuillez les complèter!<br /><br />';
}
mysql_query("INSERT INTO recherche VALUES('', '$titre', '$chemin', '$meta_description', '$meta_keywords')");
Dans ce script, la page est indexée même si toutes les informations ne sont pas présentes. Il ne tient qu'à vous de modifier ce script pour que la page ne s'indexer que si tout est complet
La fonction d'indexation est terminée. Il ne reste plus qu'à fermet toutes les parenthèses ouvertes et le dossier (fonction closedir() pour fermer un dossier).
}//Fin du "if" de META "robots"
}//Fin du "if" de l'extention en ".php"
}//Fin du "else"
}//Fin du "while"
closedir($dossier);
//Fermeture du dossier
}//Fin de la fonction
Maintenant, il suffit d'appeller la fonction et de fermer la connection à la BDD:
indexer(".");
//Appel de la fonction
mysql_close($connection);
?></body></html>
Le script est maintenant fini. A chaque fois que vous rajouterez de nouvelles pages dans votre site,
n'oubliez pas d'exécuter ce script.