Recherche dans noms de fichiers

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Recherche dans noms de fichiers

Re: Recherche dans noms de fichiers

par fury_fatal » 31 janv. 2020, 13:15

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); }

Re: Recherche dans noms de fichiers

par Shyn » 31 janv. 2020, 08:09

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

par Saian » 31 janv. 2020, 02:13

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

par fury_fatal » 30 janv. 2020, 21:43

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

par Saian » 30 janv. 2020, 14:36

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.

Recherche dans noms de fichiers

par fury_fatal » 30 janv. 2020, 13:34

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>