[RESOLU] Filtrer puis afficher le contenu d'un fichier texte.

Eléphanteau du PHP | 10 Messages

27 juin 2015, 19:42

Bonjour à tous,

J'utilise le code suivant :

Code : Tout sélectionner

<?php $fp=fopen('P:\Server\Logs\Monde.log','r'); $page=''; while(!feof($fp)) $page=fgets($fp,4096).'<br>'.$page; fclose($fp); echo$page; ?>
Il me permet d'afficher sur mon site un fichier log en commencant par la dernière ligne.

J'essai depuis quelques jours de filtrer le contenu pour afficher seulement certaines lignes, mais je bloque !
J'utilise $page=str_replace('','',$page);, mais aucune de mes expressions régulières ne fonctionnent correctement.

Voici un exemple du contenu d'un fichier Monde.log :
(Debug),6/27/2015,14:59:41,Unit Italie teleported from ( 2313 ) to ( 2317 ) addr( 0x9e43518 )
(Misc1),6/27/2015,15:00:53,User testeur1 logged off. memaddr( 0x14228e08 ) Character testeur1 was in game and exited from position ( 2315 ).
(Misc1),6/27/2015,15:01:57,Character testeur2 ( user testeur2 ) just entered the realm at 2312!
(Misc1),6/27/2015,19:36:05,User testeur3 just logged in from IP( 127.0.0.1 p64959 ). 3 users online!
(Debug),6/26/2015,14:34:27,Unit Italie teleported from ( 2309 ) to ( 2199 ) addr( 0x9h43112 )
(Debug),6/27/2015,19:31:36,Unit testeur0 teleported from ( 971 ) to ( 757 ) addr( 0x1932e458 )
Je souhaiterai que seule les lignes bleu (qui contiennent le mot Italie) s'affichent dans mon script et que toutes les autres lignes soient masquées.

Si vous avez un peut de temps pour m'aider, h'ésitez pas ;-).

Je peux utiliser un script différent s'il existe plus simple !


Très cordialement,
Steph.

Mammouth du PHP | 688 Messages

27 juin 2015, 19:58

c'est http://php.net/manual/fr/function.strpos.php pour savoir si une chaine contient une autre chaine.

Eléphanteau du PHP | 10 Messages

27 juin 2015, 20:19

Ah ! Merci beaucoup !

Je vais regarder tout ça :-).

Eléphanteau du PHP | 10 Messages

28 juin 2015, 10:50

Bon, je galère un peu, aucun de mes tests ne fonctionnent !

J'ai essayé de faire un script qui renvoi toutes les lignes contenant le mot "Italie", mais sans succès.

Je mettrais ici une solution si je trouve quelque chose et que cela marche.


Encore merci :-) !

Eléphanteau du PHP | 10 Messages

28 juin 2015, 16:51

Je ne dois pas être assez calé, je n'arrive à rien avec cette fonction.

Si quelqu'un à le temps de me faire un exemple, c'est avec plaisir !

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

28 juin 2015, 22:41

Bonjour,

Le but est de t'aider pour que tu saches le faire ensuite.
Si strpos() te renvoie false, alors il ne faut pas afficher la ligne et passer à la suivante

Qu'as tu essayé et où bloques-tu ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 10 Messages

29 juin 2015, 08:34

Bonjour,

J'ai essayé ça :

Code : Tout sélectionner

<?php foreach(file('P:\Server\Logs\Monde.log')as$line) { if((strpos($line,'(Misc1)')=== 0) || (strpos($line,'(Info)'))=== 0) { } else { echo"$line<br>"; } } ?>
Cela masque bien la ligne (Misc1) et (Info), mais cela affiche les autres. Je n'ai pas réussi à lui dire d'afficher que les lignes contenant le mot "Italie" par exemple.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

29 juin 2015, 09:12

Bah tu remplaces (Misc1) par Italie et tu mets ton echo avant le }else{ pour afficher les lignes contenant le mot italie
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 10 Messages

29 juin 2015, 09:17

J'avais essayé ça :

Code : Tout sélectionner

<?php foreach(file('P:\Server\Logs\Monde.log')as$line) { if(strpos($line,'Italie')=== 0) { echo"$line<br>"; } else { } } ?>
Mais cela ne renvoyé aucune ligne.

Je pense que cela vient du fait que la ligne ne démarre pas par Italie, mais par autre chose. Le mot Italie se trouve dans la ligne, presque au milieu.

Eléphanteau du PHP | 10 Messages

29 juin 2015, 09:25

Aaaaaaaaaaaaaah !

C'est bon ça fonctionne avec ceci :

Code : Tout sélectionner

<?php foreach(file('P:\Server\Logs\Monde.log')as$line) { if(strpos($line,'Italie')) { echo"$line<br>"; } else { } } ?>
Merci beaucoup ! Sujet résolu !

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

29 juin 2015, 09:25

Effectivement, c'est parce que tu vérifies si strpos te renvoie 0, c'est à dire si ta ligne commence par le mot recherché or il faut que tu testes pour voir si ça renvoie false
if ((strpos($line,'Italie')!== false) {
echo"$line<br>";
}
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

29 juin 2015, 09:45

Attention, si Italie est en début de ligne, ton code ne va pas afficher la ligne correspondante car strpos va renvoyer 0 (et pas false) or comme tu ne teste pas de façon strict la valeur de retour, il va zapper la ligne.
C'est pour ça qu'il est préférable d'utiliser les opérateurs de comparaison stricts === ou !==
Quand tout le reste a échoué, lisez le mode d'emploi...