auto_RSF : recherche récursive de chaine dans des fichiers

Toujours dans la rubrique j'en ai marre de le faire à la main, j'ai bricolé un fichier pour pallier à ce qui m'a le plus manqué quand je suis passé de Netbeans à Intype: la recherche de chaines dans les fichiers d'un projet... combien de fois ai-je eu besoin, pour trouver dans quelle partie d'un cms inconnu se trouvent certains appels ou certaines fonctions, de relancer Netbeans et d'effectuer cette maudite recherche...

Bon, ben là, ça le fait pour vous... Pour l'instant, c'est encore moins bien, vu que ça ne donne que la liste des fichiers sans préciser la ligne ou le contexte... ce sera pour une future MAJ ...

Si ça sert à quelqu'un, c'est là !

 


 

Le code pour se faire une idée...

<?php 

function exclude_folder_large_or_image($file){ if (!is_file($file)){return false;} if (filesize($file)>1000000){return false;} if (preg_match_all('/(?<=.)mp3|mp4|flv|jpeg|jpg|gif|png|swf/i',$file,$puits)){return false;} if (stripos($file,'$')){return false;} return true; } function glob_recursive($pattern, $flags = 0) // trouvée sur php.net/manual/fr/function.glob.php { $files = glob($pattern, $flags); foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir) { $files = array_merge($files, glob_recursive($dir.'/'.basename($pattern), $flags)); }
return $files; }

$dossier=''; if (isset($_POST['search'])&&$_POST['search']!=''){ $dossier=$_POST['f']; $chaine_a_chercher=$_POST['search']; if ($_POST['e']!=''){$extension='.'.$_POST['e'];}else{$extension='';} if (isset($_POST['regex'])){$regex=true;}else{$regex=false;}

    echo '&lt;h2&gt;Recherche de '.htmlentities($chaine_a_chercher).'&lt;/h2&gt;&lt;hr/&gt;';

    $fichiers=glob_recursive($dossier.'/*'.$extension);

    echo '&lt;ol&gt;';
    foreach ($fichiers as $fichier){
            if(exclude_folder_large_or_image($fichier,$extension)){
                    $content=file_get_contents($fichier);

                    if ($regex){
                            $nb=preg_match_all('#'.$chaine_a_chercher.'#',$content,$resultats);     
                            if ($nb&gt;0){ echo '&lt;li&gt;'.htmlentities($fichier).' ('.htmlentities($nb).' fois)&lt;/li&gt;'; }                           
                    }else{
                            $nb=stripos($content,$chaine_a_chercher);
                            if ($nb&gt;0){ echo '&lt;li&gt;'.htmlentities($fichier).' &lt;/li&gt;'; }
                    }


            }
    }
    echo '&lt;/ol&gt;';

} ?>

et pour le lien : Téléchargez le ZIP

 

Attends, si t'es du genre à passer de NETBEANS à Intype... ça explique beaucoup de choses quant à la qualité de ce que tu soumets depuis le début...

Boarf, NetBeans est trop gros, trop lent, très lourd et plein de trucs inutiles...
Un peu comme toi, en somme...

 

Là, je sens que ça va troller dans les comms... 
Le sujet du jour: "Quel est le meilleur IDE pour developper comme un pro ?"  (La semaine prochaine: "Quel est le meilleur langage pour coder comme un pro et sur quel OS faut-il l'installer ?")

❝ 12 commentaires ❞

1  Yosko le

Encore un truc que tu pouvais faire facilement dans Notepad++. Bon ok je ferme ma g...


Sinon, je commence à vraiment être addict à Sublime Text, qui le fait aussi. Et qui a l'avantage d'être multiplateforme (comme ça, on esquive la bataille des OS). La légèreté et la fonctionnalité sont ses fers de lance. Je suis sûr qu'il est bourré de défauts, mais pour l'instant, je suis encore en phase "lune de miel", donc il me parait tout joli tout beau.

 
2  Alexis le

Sinon une petite recherche sur ack (betterthangrep.com) devrait te convaincre de changer d'outil.

 
3  JeromeJ le

Moi ce qui me casse les parties avec SublimeText2 c'est qu'il ne veut pas me laisser faire ma transition AINSI vers UTF8 tranquillement :(


Je veux prendre mon temps, faire ça propre et tout (car il y a beeeeeeaucoup de boulots).


Mais non, SublimeText s'entête à 1) reconvertir mes fichiers en UTF-8 à chaque fois (alors forcément ça pète tout l'encodage et plus rien ne s'affiche correctement 2) il n'est pas tolérant et me refuse de me le reconvertir en AINSI clamant qu'il y a des caractères illégaux :(


Alors je suis obligé d'après avoir travaillé sur un fichier avec SublimeText2 contenant des caractères spéciaux, de réouvrir Notepad++ et reconvertir en AINSI (lui il ne bronche pas et n'a pas de prob pour afficher les caractères spéciaux bizaroïdes que j'aime mettre dans mes fichiers) et de me reco à mon FTP et de le réup. Grr grr.


Et le meilleur langage c'est Python.


@Yosko, ouais mais ça nécessite pas d'ouvrir tous les dits fichiers ? soit t'es entrain de troller soit de parler de fonctionnalités que j'ignorais dans Notepad++ :p


@Alexis, je suis peut-être noob sur le coup, mais c'est pas un truc à utiliser dans PHP à la place de grep si j'ai bien compris ??

 
4  Yosko le

@JeromeJ : rechercher et remplacer une chaine dans notepad++, ça peut se faire sur :



  • le fichier ouvert et avec focus

  • tous les fichiers ouverts actuellement ouverts

  • un répertoire (sans avoir besoin d'ouvrir les fichiers)


Si je ne me trompe pas cette dernière option (ainsi que la recherche dans un répertoire) est faite par un plugin, mais un plugin officiel et installé par défaut.

 
5  Bronco le

Voui, mais mon truc est mieux parce que :
1/ je le dis et puis c'est tout
2/ je fais un deuxième trou de balle à ceux qui sont pas contents (non, revenez je déconne )
3/ c'est pas lourd, sans plug in et ça marche en distant...


Plus sérieusement, Sublime text est vraiment très bien et très customisable et tout... je l'aime beaucoup aussi

 
6  Yosko le

De toute façon, j'ai dit tout ça juste parce que tu as autorisé les trolls (même si ce que je dis est toujours vrai )


Cependant, si tu souhaites me prouver que tu dégaine plus vite que ton ombre, on peut se donner rendez-vous dans la grande rue quand le soleil sera au plus haut.

 
7  Alexis le

@JeromeJ : Non, tu utilises ça en ligne de commande. C'est un grep récursif pour les développeurs. Par défaut, il ne cherche pas dans les fichiers des systèmes de gestion de version (git, svn pour ne nommer que ceux là). Tu peux filtrer par type de fichier avec les options qui vont bien. Par exemple, pour chercher dans tous les fichiers javascript la chaine test, tu écris ack --js test.
Il y a pleins d'options disponibles qui te permettent de faire pleins de choses et une en particulier qui est bien pratique, passthru qui te permet de prendre en entrée standard une entrée dynamique (genre tail) et de faire la recherche et la colorisation des résultats en dynamique.

 
8  Bronco le

@Yosko: Si il y a UN truc qu'on ne peut pas dire de moi, c'est que je suis rapide quand je tire ! Je suis plutôt du genre à prendre mon temps pour viser, prendre soin du matériel, bien lubrifier la détente et les mécanismes...
[message systeme: Attention, l'utilisateur est en surcharge humoristique]

 
9  Yosko le

Surcharge humoristique ? Moi j'ai surtout des visions déplacées, là... Prendre son temps, lubrifier les mécanismes, tout ça...
Mais après on va encore dire que j'ai l'esprit tordu.


Désolé...

 
10  Bronco le

Non, non, t'as pas DU TOUT l'esprit tordu c'est pour ça que je me suis tagué en surcharge humoristique (avec des vrais morceaux d'allusion grasses dedans )

 
11  JeromeJ le

Je préférais la version où Yosko était peut-être tordu x) ça m'aurait évité ces pensées, pauvre innocent que je suis !


(Hey Bronco, ça fait longtemps que je ne te l'ai plus dit mais ça fait longtemps que je dois te le dire : Faut qu'on parle l'ami :D)

 
12  Bronco le

hinhinhinhin

 

Fil RSS des commentaires de cet article

✍ Écrire un commentaire

les commentaires relevant du SPAM seront filtrés et dégagés direct...

Quelle est le cinquième caractère du mot 36apu5 ?