|
Pages 1 | 2
Lors du dernier épisode, nous avions renseigné
le champ "titre" de la table moteur et conçu une
"interface" capable de parcourir notre disque dur à
la recherche d'un fichier à indexer.
Nous allons modifier cette interface aujourd'hui afin
de la rendre automatique et récursive. Après
cette transformation il ne vous sera plus possible (dans l'état
actuel du script) de choisir un fichier à indexer.
Cette situation est susceptible d'évoluer lorsque nous évoquerons
les améliorations possibles à apporter à notre
code.
Pas de panique si vous souhaitez conserver "l'interface
précédente", son code était fourni en
fin du tutoriel
précédent.
Notre but aujourd'hui est d'une part de pouvoir lancer
une indexation automatique et récursive de nos fichiers et
d'autre part de renseigner le champ "origine", destiné
à localiser chaque mot dans l'arborescence.
Les modifications à effectuer à
notre script
Afin que l'indexation récursive fonctionne,
notre script (renommé "moteur.php" au lieu de "find_title.php")
doit être placé au "point de départ"
de la récursivité souhaité. Notre jeu de tests
(fourni en fin de tutoriel) pour cette indexation récursive
est constitué de cinq fichiers HTML issus de tutoriels précédents,
ils sont placés de la sorte :
- ...\EasyPHP\www\projet1\moteur\chaines_python.html
- ...\EasyPHP\www\projet1\moteur\exceptions_java.html
- ...\EasyPHP\www\projet1\moteur\rep1\chgt_registar.html
- ...\EasyPHP\www\projet1\moteur\rep2\flash_dyn_php.html
- ...\EasyPHP\www\projet1\moteur\rep2\selec_flash.html
Il faut donc placer notre script "moteur.php"
au niveau le plus haut de notre arborescence :
- ...\EasyPHP\www\projet1\moteur\moteur.php
Le script de notre moteur va devoir subir quelques
modifications, nous allons les voir ensemble.
Il va s'agir tout d'abord de concevoir (ou de trouver sur le net)
une fonction qui liste récursivement le contenu de notre
arborescence. Grâce à la documentation en ligne du
site Php.net et
plus précisemment aux commentaires ajoutés par des
internautes au sujet de la fonction readdir()
, nous récupérons une fonction nommé "echo_dir()"
qui affiche récursivement le contenu d'une arborescence.
Afficher le nom des fichiers de notre jeu d'essai ne nous intéresse
pas vraiment, aussi nous allons modifier cette fonction jusqu'à
ce qu'elle devienne le squelette, la boucle principale de
notre indexation, la voici modifiée :
function echo_dir($where)
{
$handle = opendir('.');
while ($file = readdir($handle))
{
if ($file
!= "." && $file != "..")
{
if
(is_dir($file))
{
chdir($file);
$tmp
= $where."/".$file;
echo_dir($tmp);
chdir("../");
}
else
{
if
(($where != "") && ereg(".html",$file))
{
echo
("$where/$file<br>");
$src
= $where."/".$file;
indexation($file,
$src);
}
elseif
(ereg(".html",$file))
{
echo
("/$file<br>");
$src
= "/".$file;
indexation($file,
$src);
}
}
}
}
closedir($handle);
}
echo_dir("");
Beaucoup de points à préciser ici...
Procédons par ordre :
Nous lançons tout d'abord cette fonction avec le paramètre
"" afin qu'elle démarre son traitement à
la racine de l'arborescence.
Nous récupérons un pointeur sur le répertoire
courant grâce à la fonction opendir().
La plupart des fonctions Php utilisées ici
sont issues des
fonctions "d'accès aux dossiers". Avec la boucle
while nous nous assurons de traiter tous les fichiers du dossier
courant, en effet, la boucle se poursuit tant que la fonction readdir()
ne renvoie pas "false". En tant normal celle-ci renvoie
le nom des entrées du répertoire.
Si les entrées renvoyées par readdir() n'est pas celle
désignant le répertoire précédent ("..")
ni celle du répertoire courant ("."), alors il
est intéressant de la traiter.
La fonction "is_dir()"
porte bien son nom, elle permet de vérifier si l'entrée
traitée est un répertoire, auquel cas la récursivité
rentre en jeu. Lorsqu'un répertoire est détecté,
la fonction "chdir()"
est utilisée afin de passer du répertoire courant
au nouveau répertoire.
La variable $tmp permet de concaténer le répertoire
courant avec la nouvelle entrée, ainsi l'arborescence se
construit.
Si l'entrée traitée n'est pas un répertoire,
c'est un fichier mais faut-il l'afficher, et si oui comment ? Le
"else" traite deux cas :
- Le cas d'un fichier à indexer depuis la racine de l'arborescence
- Le cas d'un fichier à indexer depuis un répertoire.
Ces deux cas se matérialisent par les "echo", respectivement
:
- echo ("$where/$file<br>");
- echo ("/$file<br>");
Ils représentent l'origine du fichier. Voilà
ce que nous obtiendrons à l'écran après l'indexation
de notre jeu d'essai :
/chaines_python.html
/exceptions_java.html
/rep2/selec_flash.html
/rep2/flash_dyn_php.html
/rep1/chgt_registar.html
La question "faut-il afficher / traiter"
ce fichier est résolue par l'utilisation de la ligne suivante
:
ereg(".html",$file)
Nous avons déjà utilisé précedemment
cette
fonction, elle permet de détecter si un fichier possède
l'extension qui nous intéresse, ici ".html".
Pour résumer, la fonction echo_dir() nous permet de boucler
récursivement autour des fichiers qui nous intéressent
dans notre arborescence. Judicieusement placées, les lignes...
indexation($file, $src);
... Vont déclencher le processus d'indexation pour chacun
des fichiers.
Pages 1 | 2
|