Désolé....
Voici :
<?php
// ##################################################################################
// **********************************************************************************
// Paramètres de configuration du module d'indexation : nom du répertoire principal
// à parcourir (rappelons que ses sous-répertoires sont parcourus de façon automatique)
// et extension des fichiers à indexer.
// **********************************************************************************
// === Localisation du répertoire principal à indexer ===
// Note : le nom du répertoire ne doit pas être refermé par un slash
// Entrez la valeur "." pour le répertoire courant, ".." pour le répertoire parent
$cheminRepertoire="..";
// === Renseignement sur les types de fichiers à indexer ===
// Note : Entrez ici les différents formats de fichiers à indexer, séparés par une virgule
// Rappel : les seuls formats acceptés pour l'instant sont htm, html et txt
$listeFormatsFichiers="htm,html,asp,aspx,php";
// ##################################################################################
?>
<html>
<head>
<title>Module d'indexation</title>
</head>
<body>
<?php
// ##################################################################################
// ****************************************************************************
// Test de la valeurs $cheminRepertoire
//*****************************************************************************
// === Test de l'existence du répertoire ===
if(!is_dir($cheminRepertoire)) {
print("Erreur ! <b>".basename($cheminRepertoire)."</b> n'est pas un répertoire.");
exit;
}
// ****************************************************************************
// Création du tableau $formatFichiers (stockant les valeurs des formats de
// fichiers à indexer)
//*****************************************************************************
// ===== Définition de la liste des formats "interdits" (c.à.d. qui ne seront en aucun cas indexés) =====
// Note : les extensions doivent être séparées par un espace
$formatsInterdits=" php3 php4 ";
// ====== Stockage des valeurs correspondant aux formats à indexer dans le tableau $formatFichiers[] ======
// Note : l'indice de ce tableau démarre à 0
$formatCourant=strtok($listeFormatsFichiers,",");
do {
if(eregi(" ".$formatCourant." ",$formatsInterdits)) {
print("Rappel : les fichiers de format <b>$formatCourant</b> ne peuvent pas être indexés.<br> \n");
$formatCourant=strtok(",");
continue;
}
else {
$formatFichiers[]=".".$formatCourant;
$formatCourant=strtok(",");
continue;
}
} while($formatCourant);
// *********************************************************************************
// Définition de la fonction "listeFichiers", qui stocke dans le tableau
// $tableauCorrespondances les chemins des fichiers trouvés dans le répertoire
// "$cheminRep" et ses sous-répertoires
// *********************************************************************************
function listeRecursiveFichiers($cheminRep,$extension) {
global $tableauCorrespondances;
static $formatsTraites;
$idRep=opendir($cheminRep);
while($objet=readdir($idRep)) {
$formatObjet=strstr($objet,".");
$cheminObjet=$cheminRep."/".$objet;
// === Elimination des répertoires "." et ".." ===
if($objet=="." or $objet=="..") {
continue;
}
// === Stockage des objets correspondants dans le tableau "$tableauCorrespondances" ===
if($formatObjet==$extension) {
$tableauCorrespondances[]=$cheminObjet;
}
// === Application de la fonction aux sous-répertoires ===
if(is_dir($cheminObjet)) {
listeRecursiveFichiers($cheminObjet,$extension);
}
}
closedir($idRep);
}
// *********************************************************************************
// Récupération de la liste des fichiers à indexer, par application de la
// fonction "listefichiers" pour chaque format spécifié par l'utilisateur.
// L'ensemble des fichiers à indexer, tous formats confondus, est stocké dans
// le tableau $listeXFichiers.
// *********************************************************************************
$nombreFormats=count($formatFichiers); // nombre de formats de fichiers à indexer
for($compt=0;$compt<$nombreFormats;$compt++) {
listeRecursiveFichiers($cheminRepertoire,$formatFichiers[$compt]);
}
$listeXFichiers=$tableauCorrespondances;
// Note : l'indice du tableau $listeXFichiers commence à 0
// *********************************************************************************
// Affichage de la liste des fichiers à indexer
// *********************************************************************************
print("<br>La liste des fichiers à indexer est la suivante :<br><br> \n");
$nombreFichiersAIndexer=count($listeXFichiers);
for ($compt=0;$compt<$nombreFichiersAIndexer;$compt++) {
print($compt." / ".$listeXFichiers[$compt]."<br> \n");
}
print("<br> \n");
// ****************************************************************************
// Création du fichier indexsite.dat et enregistrement de différentes valeurs :
// - chemin du fichier indexé
// - titre du document (s'il existe)
// - description du document (à défaut les 150 premiers caractères)
// - texte du document
// ****************************************************************************
$idFicIndex=fopen("indexsite.dat","w+");
// Ecriture d'un message d'avertissement sur la première ligne
fputs($idFicIndex,"Fichier Index. Ne pas éditer ! \n");
// Indexation des différents fichiers stockés dans le tableau $listeXFichiers;
for($compt=0;$compt<count($listeXFichiers);$compt++) {
$cheminFichierCandid=$listeXFichiers[$compt];
if(!is_readable($cheminFichierCandid)) {
continue;
}
$idFicCandid=fopen($cheminFichierCandid,"r");
$titre="";
$description="";
$ligne="";
$texte="";
while(!feof($idFicCandid)) {
// *********************************************************
// ***** Traitement ligne à ligne du fichier à indexer *****
// *********************************************************
$ligne=fgets($idFicCandid,10000);
// === suppression des espaces insecables ===
$ligne=str_replace(" "," ",$ligne);
$ligne=str_replace("&NBSP;"," ",$ligne);
// === suppression des espaces superflus (début et fin de chaine) ===
$ligne=trim($ligne);
// === ajout d'un espace à la fin de certaines ligne ===
// === (contenant effectivement du texte à indexer) ===
if (ereg("^[^<>]+$",$ligne)
or ereg(">[^<>]+<",$ligne)
or ereg(">[^<>]+$",$ligne)
or ereg("^[^<>]+<",$ligne)
) {
$ligne=$ligne." ";
}
// ****************************************************************
// === intégration de la nouvelle ligne dans le texte à indexer ===
// ****************************************************************
$texte=$texte.$ligne;
}
fclose($idFicCandid);
// ***********************************************************************
// ****** Récupération et traitement du texte stocké précédemment ******
// ** Note : l'ensemble des données est stocké dans la variable $texte ***
// ***********************************************************************
// === Elimination des antislashes éventuels ===
$texte=stripslashes($texte);
// === Récupération du titre du document (s'il existe) ===
if($testTitre=eregi("<title>(.*)</title>",$texte,$corresTitre)) {
$titre=$corresTitre[1];
}
else {
$titre="Document sans titre";
}
// === Récupération de la description du document (si elle existe) ===
// === et limitation du nombre de caractères à 150 ===
$testMeta=eregi("name=\"description\"[ ]*content=\"([^\"]*)\"",$texte,$corresDescript);
if($testMeta) {
$description=$corresDescript[1];
$description=substr($description,0,150);
}
// === Elimination des éventuelles portions de code correspondant à des scripts ===
// = (ces portions ne sont pas très bien nettoyées par la fonction strip_tags) =
$texte=eregi_replace("<script.+/script>","",$texte);
// === Elimination des tags html ===
$texte=strip_tags($texte);
// === limitation du volume indexé à 8000 caractères ===
$texte=substr($texte,0,8000);
// === Cas de figure où la description du document n'a pas pu être récupérée
// dans le metatag : par défaut, la description reprend les 150 premiers
// caractères du texte indexé ===
if(!$testMeta) {
$description=substr($texte,0,150);
}
// === Nettoyage du texte de description avec insertion de points de suspension ===
if(strlen($description)>140) {
if($testFin1=ereg("(.*)[ ][^ ]*$",$description,$corresFin1)) {
$description=$corresFin1[1];
if($testFin2=ereg("(.*)[,;:.]$",$description,$corresFin2)) {
$description=$corresFin2[1];
}
$description=$description."...";
}
else {
$description=$description."...";
}
}
// === Ecriture dans le fichier index ===
fputs($idFicIndex,$cheminFichierCandid."\n"); // écriture du chemin du fichier (ligne N)
fputs($idFicIndex,$titre."\n"); // écriture du titre (ligne N+1)
fputs($idFicIndex,$description."\n"); // écriture de la description (ligne N+2)
fputs($idFicIndex,$texte."\n"); // écriture du texte à indexer (ligne N+3)
// === Affichage d'un message de confirmation ===
print("$compt / Le fichier $cheminFichierCandid a bien été indexé <br> \n");
}
fclose($idFicIndex);
//**********************************************************************************
// Vérification du résultat de l'indexation
//**********************************************************************************
$tabFicIndVerif=file("indexsite.dat");
$nlignesEffectivementIndexees=(count($tabFicIndVerif)-1)/4;
print("<br>\n");
if($nlignesEffectivementIndexees==$nombreFichiersAIndexer) {
print("L'indexation des fichiers contenus dans le répertoire \"<b>$cheminRepertoire</b>\" a atteint son terme et s'est déroulée correctement. \n");
print("Pour effectuer une première recherche, <a href=\"moteured.php\">cliquez ici</a>.\n");
}
else {
print("L'indexation des fichiers contenus dans le répertoire \"<b>$cheminRepertoire</b>\" n'a pas atteint son terme.<br>Ce problème est peut-être dû au nombre relativement important de fichiers à indexer. Afin de tous les englober dans le fichier indexsite.dat, vous devez recommencer l'opération d'indexation en ayant préalablement augmenté (si vous en avez la possibilité) la durée maximum d'exécution des scripts PHP, dans le fichier php.ini.");
}
// ##################################################################################
?>
</body>
</html>