Exclusion dossier lors d'une recherche [Résolu]

Signaler
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009
-
Messages postés
449
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009
-
Bonjour, je suis en train de réutiliser un script de moteur de recherche, par contre, si je le laisse comme il est, il indexe tout le site, or je voudrais exclure des répertoires...Comment je peux faire ça???

Merci d'avance!!

9 réponses

Messages postés
449
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009

lol tu vois j'avais raidon ^^
  // Elimination des répertoires "." et ".."
    if($objet=="." or $objet=="..") {
      continue;
    }

Suffit de creer un tableau, d'y mettre le nom des repertoires que tu ne veux pas lister et de continuer la verif par un in_array() !

Exemple de code :
- mettons que tu ne veuille pas lister les repertoires data, admin et scripts

// Liste des dossiers a ne pas lister
$TableOfExeptions = array('data', 'admin', 'scripts');

// Voila le code modifier  // Elimination des répertoires "." et ".."if ( ($objet '.') or ($objet '..') orin_array($objet, $TableOfExeptions)   )
    continue;

   
Et la sa devrait fonctionner ^^ (note que j'ai un peu modifier la syntaxe, notement les accolades pas indispensables et les ' a la place des ")

Enjoy !

@+
Messages postés
449
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009

Donne nous le code source, sa pourrait etre un debut !

@+
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

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>


<?php


// ##################################################################################
// ****************************************************************************
//  Test de la valeurs $cheminRepertoire
//*****************************************************************************


// Test de l'existence du répertoire


if(!is_dir($cheminRepertoire)) {
  print("Erreur ! ".basename($cheminRepertoire)." 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 $formatCourant ne peuvent pas être indexés.
\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("
La liste des fichiers à indexer est la suivante :

\n");


$nombreFichiersAIndexer=count($listeXFichiers);


for ($compt=0;$compt<$nombreFichiersAIndexer;$compt++) {
  print($compt." / ".$listeXFichiers[$compt]."
\n");
}


print("
\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("&nbsp;"," ",$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é
\n");
}


fclose($idFicIndex);


//**********************************************************************************
// Vérification du résultat de l'indexation
//**********************************************************************************


$tabFicIndVerif=file("indexsite.dat");
$nlignesEffectivementIndexees=(count($tabFicIndVerif)-1)/4;


print("
\n");


if($nlignesEffectivementIndexees==$nombreFichiersAIndexer) {
  print("L'indexation des fichiers contenus dans le répertoire "$cheminRepertoire" a atteint son terme et s'est déroulée correctement. \n");
  print("Pour effectuer une première recherche, cliquez ici.\n");
}


else {
  print("L'indexation des fichiers contenus dans le répertoire "$cheminRepertoire" n'a pas atteint son terme.
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.");
}


// ##################################################################################
?>



</html>
Messages postés
449
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009

// *********************************************************************************
// 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]);
}

Sa me parait l'endroit ideal a modifier pour ne lister que les repertoires voulus. Trouve l'implementation de la fonction listeRecursiveFichiers() et modifie "a la main" son fonctionnement (c'est a dire pile poil adapte a ton site). Essaye de nous transmettre cette fonction pour que l'on puisse travailler dessus ;-)

@+
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Salut,

je ne vois pas exactement quoi faire...
Est ce que je peux pas faire un truc du genre; si oui, comment je peux utiliser cette variable en condition...? :

$exclu=array(


"../TOTO",
)

Merci!!
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Please, je rame trop là, qq'un peut m'aider...????


 


Merci!!
Messages postés
449
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009

Justement ! Si tu trouves la fonction que je t'ai indique, on pourra ecrire un code capacble de resoudre ton probleme. Sans sa, c'est pas le peine de dire que t'as besion d'aide, personne ne pourra rien ...
Sa ne sera jamais que des supositions !

@+
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

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);
}
Messages postés
449
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009

Alors ? Est-ce que ton probleme est regle ?? Si c'est le cas faut le signaler !

@+