Page 1 sur 1

Recherche dans noms de fichiers

Posté : 30 janv. 2020, 13:34
par fury_fatal
Bonjour,
J'ai trouvé un script de recherche dans les noms de fichiers assez simple. Il marche, mais il affiche plein d'erreurs :

Notice: Undefined offset: 1 in D:\localhost\recherche.php on line 16
Notice: Undefined offset: 1 in D:\localhost\recherche.php on line 16
Résultat : Test

Le code :

Code : Tout sélectionner

<?php $compteur = 0; // Initialise le compteur du nombre de résultats $d = dir("./"); // Rechercher dans ce dossier if (isset($_POST['submit']) and isset($_POST['mot'])) { $mot = strtolower(trim($_POST['mot'])); // trim() efface les espaces avant et après while ($entry = $d->read()) { // var_dump($entry); preg_match("#($mot+?)#s", $entry, $new); // var_dump($new); $data = $new[1]; if (!empty($data)) { $compteur++; echo '<h2>Résultat : <a href="'.$entry.'">'.ucfirst($data).'</a></h2>'; } if ($compteur >= 3) {break;} // Limiter à 3 résultats } $d->close(); if ($compteur <= 0) {echo '<h2>Pas de résultat !</h2>';} } ?> <form method="post"> <input type="text" name="mot" maxlength="30"> <button type="submit" name="submit">Recherche</button> </form>

Re: Recherche dans noms de fichiers

Posté : 30 janv. 2020, 14:36
par Saian
Salut, tu as cette erreur quand $new[1] n'existe pas. C'est lié au preg_match qui ne doit à priori pas trouver le pattern dans $entry.

Re: Recherche dans noms de fichiers

Posté : 30 janv. 2020, 21:43
par fury_fatal
Ah d'accord !
Je vais vérifier que $new[1] existe.

Maintenant ça marche sans erreur :

Code : Tout sélectionner

while ($entry = $d->read()) { // var_dump($entry); preg_match("#($mot+?)#s", $entry, $new); // var_dump($new); if (isset($new[1])) { $compteur++; echo '<h2>Résultat : <a href="'.$entry.'">'.ucfirst($new[1]).'</a></h2>'; if ($compteur >= 3) {break;} // Limiter à 3 résultats } }
J'ai une autre question. Je suis nul en php objet.
$d->read() c'est du php objet ?
J'ai du mal à comprendre ->read(). En php procédural, c'est quoi l'équivalent ?

Re: Recherche dans noms de fichiers

Posté : 31 janv. 2020, 02:13
par Saian
Oui c'est de l'objet. D'après la documentation c'est un objet de classe Directory. La valeur de retour de la fonction dir :
https://www.php.net/manual/fr/function.dir.php

Et la tu as le détaille de la classe :
https://www.php.net/manual/fr/class.directory.php

Quand tu fais un $d->read() tu appelles la méthode read de l'objet $d (une instance de Directory).
En procédurale tu pourrais utiliser les fonctions opendir et readdir.

Re: Recherche dans noms de fichiers

Posté : 31 janv. 2020, 08:09
par Shyn
En parcourant le forum, je suis tombé par le grand du hasard sur ce topic, merci pour ces petites astuces les mecs car je suis vraiment un noob en la matière

Re: Recherche dans noms de fichiers

Posté : 31 janv. 2020, 13:15
par fury_fatal
Merci,
La doc précise qu'il faut toujours mettre !== false pour vérifier la boucle while.

Code : Tout sélectionner

while (false !== ($entry = $d->read())) { }
J'ai réussi aussi avec la méthode procédurale :

Code : Tout sélectionner

if ($handle = opendir('./')) { while (($entry = readdir($handle)) !== false) { // code ici } closedir($handle); }