Recherche expression dans fichier

Soyez le premier à donner votre avis sur cette source.

Vue 12 966 fois - Téléchargée 608 fois

Description

Ce script regroupe une fonction de recherche d'expression dans tous les fichiers d'un répertoire donné, et utilise une fonction de sortie (soit écran, soit fichier) en affichage.

Source / Exemple :


<?
$dir = $dir ? $dir : "/usr/work/web/www.monsite.com/htdocs/";

print "
<html>
<head></head>
<body>
<form>
<table>
	<tr>
		<td>Entrez le répertoire de recherche :</td>
		<td><input type='text' name='dir' value=\"$dir\" size=80></td>
	</tr>
	<tr>
		<td>Entrez la Chaîne à rechercher :</td>
		<td><input type=text name=expression value=\"$expression\"></td>
	</tr>
	<tr>
		<td colspan=2 align=center><input type=submit value='Rechercher'></td>
</table>
";

if ($expression && $dir) {
	$mydir = $dir;
                $mydir = preg_match("/\/$/", $mydir) ? $mydir : $mydir."/";
	$expression = addslashes($expression);
	$expression = str_replace("(", "\(", $expression);
	$expression = str_replace(")", "\)", $expression);
	$hash = array();

	recur($mydir);
	afficher_tableau($hash);
}

function recur($dir) {
	global $lefich2, $hash, $j, $expression;

	$chemin = pathinfo($dir);

	if ($chemin["basename"] == ".." || $chemin["basename"] == ".") return;
	if (!$dir2 = opendir($dir)) print "Échec ouverture $dir<br>";

	while ($file = readdir($dir2)) {
		if (is_dir($dir."/".$file) || $file == "." || $file == "..") @recur($dir."/".$file);
		else {
			if (!$lefich = fopen("$dir/"."$file", "r")) print "Échec<br>";
			else {
				$i = 0;

				while ($ligne = fgets($lefich, 4096)) {
					$i++;

					if (preg_match("/.*($expression).*/i", $ligne, $monres)) {
						$monres[0] = preg_replace(array("/</", "/>/"), array("", ""), $monres[0]);
						$monres[0] = preg_replace("/($expression)/i", "<font color=red>\\1</font>", $monres[0]);
						$hash[$dir][$file][$i] = $monres[0];
					}
				}
			}

			fclose($lefich);
		}
	}

	closedir($dir2);
}

print "
</form>
</body>
</html>
";

function afficher_tableau($tableau, $nomfic = "", $tab = "") {
	if (is_array($tableau)) {
		foreach ($tableau as $cle => $valeur) {
			if (is_array($valeur)) {
				if ($nomfic) {
					fputs($nomfic, "$tab$cle =>\n");
					@afficher_tableau($valeur, $nomfic, $tab."\t");
				} else {
					print $cle.' => <ul>';
					@afficher_tableau($valeur);
					print '</ul>';
				}
			} else {
				if ($nomfic) fputs($nomfic, "$tab$cle => $valeur\n");
				else print $cle." = ".$valeur." <br>";
			}
		}
	} else {
		if ($nomfic) fputs($nomfic, "$tableau");
		else print $tableau;
	}
}
?>

Conclusion :


Attention au divers droits sur les scripts que vous consultez.
Les recherches s'effectuent côté serveur.
A tester directement

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

arceva
Messages postés
1
Date d'inscription
samedi 7 avril 2007
Statut
Membre
Dernière intervention
11 juillet 2007

Super source hyper utile
Depuis le temps je voulais le faire
MERCI
Steph666
Messages postés
74
Date d'inscription
jeudi 6 mars 2003
Statut
Membre
Dernière intervention
5 juin 2008

Salut tlm,

Une petite mise à jour pour Justone72 à été effectué, mais j'ai pas eu trop le temps d'approfondir, un peu pressé, j'ai essayé de répondre à la demande au plus vite.

Si vous pouvez tester et me dire si gros bug ou pas.

En effet j'ai rajouté le fait de pouvoir télécharger ou lire le fichier suivant le cas en cliquant sur le nom de celui-ci.

Merci.
lorenzovb
Messages postés
1
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
4 février 2004

Salut et Bravo Steph666,
le code à l'air super mais, idem j'aurais aimé des commentaires.

Merci
CiAO
Steph666
Messages postés
74
Date d'inscription
jeudi 6 mars 2003
Statut
Membre
Dernière intervention
5 juin 2008

Merci scullder.

N'hésitez surtout pas à mettre des commentaires pour améliorer.
cs_scullder
Messages postés
36
Date d'inscription
vendredi 28 mars 2003
Statut
Membre
Dernière intervention
12 novembre 2004

je pensais justement à faire ça ce matin parceque ça faisait trouze plombes que j'en avais besoin :) mais je l'aurais pas fait aussi bien :)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.