Précédent   Forum des professionnels en informatique > PHP > Outils > EasyPHP
EasyPHP Forum d'entraide sur EasyPHP : installation, utilisation, etc. Avant de poster -> Cours EasyPHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/07/2007, 09h57   #1
Membre du Club
 
Avatar de cflo91
 
Inscription : mars 2007
Messages : 113
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 113
Points : 41
Points : 41
Par défaut recherche dans un fichier texte

Bonjour,
Je voudrais pouvoir rechercher du texte dans un fichier texte.
Au final je voudrai que ça m'affiche la ligne ou mon terme à été trouvé.
J'ai fait cela mais ça ne me retourne rien...

J'ai remarqué que je ne rentrais pas dans la boucle " while (!feof($pointeur))" mais je ne sais pas pourquoi.

Pouvez vous m'aidez svp.

Merci d'avance
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
$url = C_CHEMIN."/lang/fr/textes.inc.php";
 
$fichier = $url;
$s = $recherche;
$motif = "/$s/";
 
$pointeur = fopen($fichier, "r");
$i = 0;
 
if ($pointeur) {
 
  while (!feof($pointeur)) {
 
   echo "tata";
   $ligne = fgets($pointeur);
 
    if (preg_match($motif, $ligne, $r)) {
      echo $ligne.'';
      $i++;
      }
    }
  fclose($pointeur);
  echo "Motif '$s' trouvé $i fois.";
  }
cflo91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 11h08   #2
Membre confirmé
 
Avatar de ShinJava
 
Inscription : septembre 2004
Messages : 411
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 411
Points : 287
Points : 287
Salut,
Concernant l'affichage de la ligne, regarde la fonction file(), cela pourra t'être utile :
http://www.php.net/file


Sinon pour ton problème, j'imagine que l'echo "tata" c'est pour tester si tu es bien dans ta boucle ?
Est-ce que tu peut le mettre apres ton premier if ? Car ton while m'a l'air correct. S'il ne passe pas, c'est peut-être que tu ouvres un fichier vide ou bien que le chemin est faux ?
Sinon pour ton premier if, s'il sert à tester si le fichier existe, tu as aussi la fonction file_exists() qui serait plus approprié :
http://www.php.net/file_exists

Voila voila,
++
ShinJava
__________________
Petit débutant deviendra grand... débutant
ShinJava est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 11h15   #3
Membre du Club
 
Avatar de cflo91
 
Inscription : mars 2007
Messages : 113
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 113
Points : 41
Points : 41
merci pour ta réponse.
effectivement le echo "tata" c'est pour tester...
Je rentre bien dans mon if mais pas dans le while, je ne sais pas pourquoi...
cflo91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 11h23   #4
Membre confirmé
 
Avatar de ShinJava
 
Inscription : septembre 2004
Messages : 411
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 411
Points : 287
Points : 287
Dans ce cas là, a quoi correspond C_CHEMIN ?
Peut etre que le chemin n'est pas bon ?

Si ton repertoire /lang/ ce trouve à la racine de ton site , essaye cette méthode pour ouvrir le fichier :

Code :
$url = $_SERVER['DOCUMENT_ROOT']."/lang/fr/textes.inc.php";
Ca devrait passer...
__________________
Petit débutant deviendra grand... débutant
ShinJava est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 11h32   #5
Membre du Club
 
Avatar de cflo91
 
Inscription : mars 2007
Messages : 113
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 113
Points : 41
Points : 41
je viens de tester pour le chemin du fichier et c'est bon.
J'ai par contre créer un fichier .txt à la place et la il rentre dans la boucle...
Pourquoi ne veut il pas rentrer dans mon fichier.php, il l'interprete differement ?

De plus, en testant avec un fichier.txt ,j'ai une erreur à chaque itération de mon while pour la ligne:
Code :
1
2
 
if (preg_match($motif, $ligne, $r))
voici l'erreur:
Warning: Unknown modifier 't' in...

cflo91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 11h57   #6
Membre confirmé
 
Avatar de ShinJava
 
Inscription : septembre 2004
Messages : 411
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 411
Points : 287
Points : 287
Normalement ca ne doit pas poser de problème pour lire un fichier .php, tu as fait le test de file_exists() ?
Je viens d'essayer de lire un fichier.php chez moi, et je n'ai eu aucun problème.

Sinon pour le preg_match, j'ai un peu de mal à le saisir, à quoi correspond $r ?
__________________
Petit débutant deviendra grand... débutant
ShinJava est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 12h01   #7
Membre du Club
 
Avatar de cflo91
 
Inscription : mars 2007
Messages : 113
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 113
Points : 41
Points : 41
J'ai trouvé d'où venait la derniere erreur:

if (preg_match('# toto #', $ligne, $r))

il interprete mal le fait que ce soit une variable à la place de "toto".

Par contre toujours pas de solution pour mon probleme quand le fichier est en .php
cflo91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 12h05   #8
Membre du Club
 
Avatar de cflo91
 
Inscription : mars 2007
Messages : 113
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 113
Points : 41
Points : 41
Je viens de tester avec le file_exist et en effet ça me dit que mon fichier n'existe pas, je ne comprend pas pourquoi ?
cflo91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 12h09   #9
Membre confirmé
 
Avatar de ShinJava
 
Inscription : septembre 2004
Messages : 411
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 411
Points : 287
Points : 287
La variable doit normalement passer.

Je me suis basé sur ton exemple pour coder un mini truc et cela fonctionne :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
$i=0;
$recherche="webmaster";
$s = $recherche;
$motif = "/$s/";
$pointeur = fopen($_SERVER['DOCUMENT_ROOT']."/login/name.php", "r");
while(!feof($pointeur))
{
	$ligne = fgets($pointeur);
	if (preg_match($motif, $ligne)) 
	{
      echo $ligne.'';
      $i++;
    }
 
}
fclose($pointeur);
Cela m'affiche bien "webmaster" sur ma page...
A part le fait que le chemin ne soit pas bon, je ne vois pas qu'elle est le problème...
__________________
Petit débutant deviendra grand... débutant
ShinJava est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 12h12   #10
Membre confirmé
 
Avatar de ShinJava
 
Inscription : septembre 2004
Messages : 411
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 411
Points : 287
Points : 287
Citation:
Envoyé par cflo91
Je viens de tester avec le file_exist et en effet ça me dit que mon fichier n'existe pas, je ne comprend pas pourquoi ?
Tu doit surement chercher dans le mauvais repertoire.
A la fin de ton code fait :

Tu verra surement d'ou vient le problème.
__________________
Petit débutant deviendra grand... débutant
ShinJava est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 12h19   #11
Membre du Club
 
Avatar de cflo91
 
Inscription : mars 2007
Messages : 113
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 113
Points : 41
Points : 41
j'ai fait un echo $url et ça m'affiche bien le bon chemin, je l'ai copié dans ma barre d'adresse et j'arrive bien au fichier...

Je comprend plus rien..
cflo91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 13h44   #12
Membre confirmé
 
Avatar de ShinJava
 
Inscription : septembre 2004
Messages : 411
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 411
Points : 287
Points : 287
J'étais parti mangé

Bon j'ai une question : que retourne ton $url ? Une url de style http:// ou bien le chemin vers ton fichier (genre c:/ pour windows).
S'il s'agit effectivement d'un http:// , ca doit normalement poser un problème avec un fichier php (t'imagines si on pouvait ouvrir n'importe quel fichier .php de n'importe quel site...). En gros ton fopen() prendra en compte uniquement l'affichage sur ton navigateur (il me semble). C'est pour ça que cela fonctionnerait sans problème avec un fichier texte (comme dans ton cas plus haut).
Dans le cas où ton $url retourne effectivement un lien internet, je préconise la solution que j'ai proposé plus haut avec le $_SERVER['DOCUMENT_ROOT'].

Voila voila
++
ShinJava
__________________
Petit débutant deviendra grand... débutant
ShinJava est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 14h05   #13
Membre du Club
 
Avatar de cflo91
 
Inscription : mars 2007
Messages : 113
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 113
Points : 41
Points : 41
Oui il s'agit d'un htpp...
http://127.0.0.1/serveurweb/dvpt_fr/...textes.inc.php

mais j'ai testé avec $_SERVER['DOCUMENT_ROOT'] et ça me donne ça:
c:/program files/easyphp1-8/www/lang/fr/textes.inc.php

or mon fichier se trouve :
D:\serveurweb\sites\dvpt_fr\lang\fr


Comment pourrais je faire?
cflo91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 14h16   #14
Membre confirmé
 
Avatar de ShinJava
 
Inscription : septembre 2004
Messages : 411
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 411
Points : 287
Points : 287
Argh j'ai jamais utilisé easyphp. Je ne connais pas trop comment se passe la configuration à l'interieur (faut que tu te renseignes là-dessus)

J'imagine que le site est en test sur ton ordi et que tu l'uploadera sur un serveur ? (si c'est le cas, le $_SERVER['DOCUMENT_ROOT'] fonctionnera).
Pour faire fonctionner ton code sur ton ordi, met tout simplement le chemin complet vers ton fichier dans le fopen.
Ou bien, créer une variable avec comme valeur le chemin vers le repertoire de la racine de ton site. Comme ca quand tu uploadera le site sur ton serveur, t'aura juste à changer la valeur de cette variable... (un peu comme ton C_CHEMIN)... au fait ton C_CHEMIN a quoi comme valeur ?

++
ShinJava
__________________
Petit débutant deviendra grand... débutant
ShinJava est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 14h17   #15
Membre du Club
 
Avatar de cflo91
 
Inscription : mars 2007
Messages : 113
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 113
Points : 41
Points : 41
C'est bon j'ai mis l'adresse.

Par contre, je voudrais qua ça me retourne le numero de la ligne où le texte a été trouvé c'est possible ?
cflo91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 14h25   #16
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Il suffit que tu te rajoutes un petit compteur dans ta boucle qui va compter le nombre de lignes, comme ca quand tu trouves ton mot tu connais le numéro de la ligne qui va avec
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 14h26   #17
Membre confirmé
 
Avatar de ShinJava
 
Inscription : septembre 2004
Messages : 411
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 411
Points : 287
Points : 287
enfin !

Alors pour la ligne, je sais pas si tu as jeter un coup d'oeil sur la fonction file(), apparement tu peux faire quelque chose avec.
Sinon tu peux tout simplement incrémenter une valeur a chaque passage de ta boucle while.
Genre tu déclares $j=1 (on commence a la premiere ligne) et la fin de ta boucle while tu met un $j++... et quand tu es dans ton if preg_match, tu affiche $j.

J'ai une petite question sur ton preg_match , à quoi correspond le $r (le 3eme parametre sert à quoi ?)

++
ShinJava
__________________
Petit débutant deviendra grand... débutant
ShinJava est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 15h17   #18
Membre du Club
 
Avatar de cflo91
 
Inscription : mars 2007
Messages : 113
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 113
Points : 41
Points : 41
Citation:
Envoyé par ShinJava
enfin !

Alors pour la ligne, je sais pas si tu as jeter un coup d'oeil sur la fonction file(), apparement tu peux faire quelque chose avec.
Sinon tu peux tout simplement incrémenter une valeur a chaque passage de ta boucle while.
Genre tu déclares $j=1 (on commence a la premiere ligne) et la fin de ta boucle while tu met un $j++... et quand tu es dans ton if preg_match, tu affiche $j.

J'ai une petite question sur ton preg_match , à quoi correspond le $r (le 3eme parametre sert à quoi ?)

++
ShinJava
Je ne sais pas à quoi elle sert, je l'ai supprimé...
cflo91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 15h23   #19
Membre du Club
 
Avatar de cflo91
 
Inscription : mars 2007
Messages : 113
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 113
Points : 41
Points : 41
Merci pour votre aide, ça fonctionne nikel !
cflo91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 15h33   #20
Membre confirmé
 
Avatar de ShinJava
 
Inscription : septembre 2004
Messages : 411
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 411
Points : 287
Points : 287
Cool , cette petite discussion m'a permis de revoir quelques petites bases. Merci
Bonne journée et bon courage la suite

++
ShinJava
__________________
Petit débutant deviendra grand... débutant
ShinJava est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h06.


 
 
 
 
Partenaires

Hébergement Web