Exploitation d'un fichier Log - Garder que 2 jours

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 : Exploitation d'un fichier Log - Garder que 2 jours

par chrislabricole » 21 avr. 2009, 23:59

Up, je n'ai toujours pas trouvé comme faire :?

Merci beaucoup :)

par chrislabricole » 15 avr. 2009, 18:02

Bon, voilà se que ça donne, j'avais déjà réussi à faire ça, mais il y a 2 problèmes :
1) Il faut marquer à l'endroit de la première ligne du deuxième jour, là, il me marque à chaque fois que je change d'heure...

2) Comment faire pour marquer avec un <hr /> pile poil à la fin du premier jour ? Donc pour couper le premier jour du deuxième jour, et pour enlever la partie vieille de 2 jours du Log.

Voici le code :
		$lines = file(LOG_PATH);
		$line_number = count($lines)-1;
		
		$i = $line_number;
		
		while( ($i <= $line_number) && ($i >= 0) ){ // Je préfère faire une While en décrémentation, comme on lis en sens inverse, t'en qu'à faire :P
		
			list($hour, $minut, $second) = explode(':', substr($lines[$i], 1, 8)); // Récupération des horaires
			
			
			if( ($line_number-$i) == 0 ){ // Si c'est la 1ère execution de la boucle
				$conserve_Premiere_Heure = $hour; // On enregistre la première heure dans une variable
				
			} else {
			
				if( $hour < $conserve_Premiere_Heure ){ // Si l'heure courante est inférieure à la 1ère heure enregistrée ...
				
					$conserve_Premiere_Heure = $hour; // On enregistre alors l'heure dans la même variable
					$contents .= '<b style="color:#FF0000;">Enregistrée</b>';

				} else {

					$contents .=  '<b style="color:#00FF00;">'.$hour.' > '.$conserve_Premiere_Heure.'</b>';
					
				}

			}

			
			$contents .= ' '.($line_number-$i).' : '.$hour.':'.$minut.':'.$second.'<br />';
			
			$i--; // Décrémentation pour la While
		}
Je précise qu'avec ça, on obtient un Log à l'envers (Première ligne la plus récente et dernière ligne la plus ancienne...)

Merci de votre aide ! :)

par Nagol » 15 avr. 2009, 17:39

prends tes valeurs et passes les dans un mktime et compare avec un mktime qui fait aujourd'hui - 2 récupérer un timestamp dans chacun et fait un bete if($cur>$twodaysago). grosso modo ca devrait marcher sans $etre trop pourri, mais c'est surtout grâce à la bonne remarque de sekil qui dit de parcourir du plus récent au plus vieux. :)

par Ryle » 15 avr. 2009, 17:39

Utilise une variable temporaire dans laquelle tu stockes ton heure... à chaque fois tu compares l'heure de la ligne courrante avec celle stockée dans ta variable et si l'heure de la ligne courrante est supérieure à l'heure de la ligne précédente, c'est que tu as changé de jour.

Après suffit juste d'un compteur pour savoir combien de jour tu veux remonter ainsi :)

par chrislabricole » 15 avr. 2009, 17:35

Je me suis basé sur la même technique :)

Mais j'arrive pas trop à détecter la rupture de décroissance dans la boucle while :?

par Sékiltoyai » 14 avr. 2009, 23:40

Tu parcours le fichier en ordre inverse, à la recherche du motif \n\[\d{2}:\d{2}:\d{2}\]. Le premier des trois nombres est décroissant, à chaque fois que tu as une rupture de sa décroissance, c'est que tu as un nouveau jour.

Exploitation d'un fichier Log - Garder que 2 jours

par chrislabricole » 14 avr. 2009, 23:31

Bonsoir tout le monde :)

Depuis toute la soirée, je réfléchi et j'essaie de retranscrire ça en PHP, mais je n'ai pas l'air d'y parvenir :P

Voilà se que je veux faire : J'ai un fichier Log où il y a plusieurs jours à l'intérieur, je souhaiterai prendre seulement les 2 plus récents jours. Le problème, c'est l'endroit où mettre la "coupure" entre mes 2 jours et le reste du Log (Qui m'ai un peu inutile, et ça risquerait de prendre du temps à charger...). Sachant qu'il doit aussi y avoir une marque (Genre, un <hr />) entre mes 2 jours que je récupère.

Je ne sais pas trop comment m'y prendre ...

Voici comment le Log est disposé (Un petit extrait heureusement :P) :

Code : Tout sélectionner

[20:55:48] Texte texte ... [20:56:52] Texte texte ... [20:58:35] Texte texte ... [20:59:41] Texte texte ... [21:01:12] Texte texte ... [21:05:58] Texte texte ... [21:11:22] Texte texte ... [21:13:03] Texte texte ...
Voilà, mon code est un peu brouillon, mais je voudrai surtout que vous partiez de vos idées, sans avoir vue ma technique que j'ai plutôt utilisée. :P
J'utilise bien évidemment une While :P

Quels sont vos idées ? Des exemples ? :)

Merci beaucoup ! :D