IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Extraction d'information de logs en php


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 78
    Points : 46
    Points
    46
    Par défaut Extraction d'information de logs en php
    Bonjour tous le monde

    je me permet de vous poser cette question parce que la je galaire.

    Je doit extraire l'heure de debut , l ' heure de fin et le nombre d'enregistrement du fichier logs (voir exemple).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    20120520120522162757:version 2.0
    22162853:Nombre d enregistrements Attendus :939438
    20120522162853:Nombre d enregistrements Ecrits :939438
    20120522162854:Flux:LRENA_ERZ
    20120522162854:Nombre d enregistrements Attendus :0
    20120522162854:Nombre d enregistrements Ecrits :0
    20120522162854:Flux:RESZ_MERS
    20120522162950:Nombre d enregistrements Attendus :7.39028e+06
    20120522163219:Nombre d enregistrements Ecrits :7.39028e+06
    20120522163219:FIN NORMALE DU TRAITEMENT
    20120522182148:version 2.0

    donc pour cela j'ai fait une fonction pour ouvrir le fichier log et rechercher les infos.


    fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
     
    // Open logs and search.
     
    	function tep_openlog() 
                  {
                    global $directory;
     
     
                    $content = file_get_contents($directory);
     
     
                    $logs = explode(':', $content);
    		foreach ($logs as $result) {
     
     
    			if (stristr($result, 'Nombre d enregistrements Ecrits') && stristr($result, 'Nombre d enregistrements Attendus')) {
    				$datas .= $result.'<br /> <hr /> <br />';
     
                         }else{
                        $datas .= $result.'<br /> <hr /> <br />';
     
                       }
     
     
     
    	     }
     
     
            return $datas;
    	}
     
     
    ////

    Avec cette fonction j'importe bien mes logs mais je ne sais pas comment recupérer la premiere et dernier date.

    J'ai essayer stristr mais sans succes car je n'arrive pas a comprendre.

    Merci d'avance de votre aide.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Ton code n'est pas clair du tout.
    A quelles lignes correspondent nombre d'enregistrement, début et fin dans tes logs? Est-ce qu'une entrée commence par "Version 2.0" et se termine par "fin normale du traitement?"

    file_get_contents récupère tout le texte en un seul string, ce qui n'est pas facilement manipulable. Utilise plutôt file() (ou fopen/fgets si le fichier est lourd), puis explode la ligne ainsi obtenue en un array. Enfin, récupère l'élement qui t'intéresse en fonction des valeurs présentes dans l'array.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 78
    Points : 46
    Points
    46
    Par défaut
    Bonjour et merci pour ta réponse.

    Pour te repondre ce log commence toujours par la version
    mais peut finir aléatoirement. Si le logs c'est mal passer on aura des lignes en plus stipulant que le traitement c'est mal passer.

    Quand au nombre d'enregistrement il s'agit du nombre d'enregistrement ecrit et nombre d'enregistrement attendu leurs nombre est stipuler après le : et peut ce presenté normalement ou sous la forme exposant.


    pour fil_get_content je savais pas tu ma appris un truc merci

    a plus.

  4. #4
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    <?php
    $handle = fopen("path_et_nom_du_fichier.log", "r");
        while (($ligne = fgets($handle)) !== false) {
    		$champ = explode(":",$ligne);
    		$dateLog = trim($champ[0]);
    		$textLog = trim($champ[1]);
    		switch (count($champ))
    		{
    			case 0:
    			case 1:
    				echo "pas assez de champs dans la ligne<br/>";
    				exit;
    			break;
    			case 2:
    			case 3:
    				$dateLog = trim($champ[0]);
    				$textLog = trim($champ[1]);
    				if(count($champ)==2)
    				{
    					$dataLog = "";
    				}else{
    					$dataLog = trim($champ[2]);
    				}
    			break;
    			default:
    				echo "trop de champs dans la ligne<br/>";
    				exit;
    		}
     
    		switch ($textLog)
    		{
    			case "version 2.0":
    				echo "Debut :".$dateLog."<br/>";
    			break;
    			case "Nombre d enregistrements Attendus":
    				echo "Attendu :".$dataLog." rec. <br/>";
    			break;
    			case "Nombre d enregistrements Ecrits":
    				echo "Ecrit :".$dataLog." rec. <br/>";
    			break;
    			case "Flux":
    				echo "Flux :".$dataLog." <br/>";
    			break;
    			case "FIN NORMALE DU TRAITEMENT":
    				echo "Fin :".$dateLog."<br/>";
    			break;
    			default:
    				echo "Erreur :[".$textLog."]<br/>";
    		}
        }
        if (!feof($handle)) {
            echo "Erreur: fgets() a échoué\n";
        }
    fclose($handle);
    ?>

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 78
    Points : 46
    Points
    46
    Par défaut merci
    Merci ton idée étais vraiment génial je n'y aurais jamais penser
    (décidement je suis nul en php)

    Je l'ai quand même modifier car il y avais des lignes dans le logs qui étais differentes (je ne peut pas les même pour des question de confidentialité)
    ce qui posait problème.

    de plus je l'ai mis dans une fonction

    ce qui donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
     
     
    // Open logs.
     
    	function tep_openlog( $directory) 
                  {
                    global $directory;
     
                $handle = fopen($directory, "r");
                while (($ligne = fgets($handle)) !== false) {
    		$champ = explode(":",$ligne);
    		$dateLog = trim($champ[0]);
    		$textLog = trim($champ[1]);
     
    		switch (count($champ))
    		{
    			case 0:
    			case 1:
    				echo "pas assez de champs dans la ligne<br/>";
    				exit;
    			break;
    			case 2:
    			case 3:
    				$dateLog = trim($champ[0]);
    				$textLog = trim($champ[1]);
    				if((count($champ)==3) && ($textLog =="Nombre d enregistrements Attendus") )
    				{
    					$dataLog = trim($champ[2]);
    					$nbrrec = $nbrrec + $dataLog;
    				}elseif ((count($champ)==3) && ($textLog =="Nombre d enregistrements Ecrits") ){
    					$dataLog = trim($champ[2]);
    					$nbrrecwrite = $nbrrecwrite + $dataLog;
     
    				}else{
    					$dataLog = "";
    				}
    			break;
    			default:
     
    		}
     
     
     
     
    		switch ($textLog)
    		{
    			case "version 2.0":
    				echo "Debut :".$dateLog."<br/>";
    			break;
    			case "Nombre d enregistrements Attendus":
    				echo "Attendu :".$dataLog." rec. <br/>";
    				echo "Total Attendu :".$nbrrec." rec. <br/>";
    			break;
    			case "Nombre d enregistrements Ecrits":
    				echo "Ecrit :".$dataLog." rec. <br/>";
    				echo "Total Ecrit :".$nbrrecwrite." rec. <br/>";
     
    			break;
    			case "FIN NORMALE DU TRAITEMENT":
    				echo "Fin :".$dateLog."<br/>";
    			break;
    			default:
     
    		}
     
     
     
     
        }
        if (!feof($handle)) {
            echo "Erreur: fgets() a échoué\n";
        }
    fclose($handle);
     
            return $champ;
    	}
     
     
    ////
    merci encore il me reste plus a trouver le moyen de traduire les nombre en exposant (2.547578e+06) en nombre entier.

    merci encore

  6. #6
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    Citation Envoyé par badibad Voir le message
    il me reste plus a trouver le moyen de traduire les nombre en exposant (2.547578e+06) en nombre entier.
    la réponse est dans la question :

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 78
    Points : 46
    Points
    46
    Par défaut
    en fait il suffisait de mettre la varieble en float
    float($datalog);

    merci en tous cas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. extraction d'informations conditionnelle
    Par raboliot dans le forum Langage SQL
    Réponses: 3
    Dernier message: 30/03/2007, 10h39
  2. Plus d'informations pour développer en PHP
    Par karabok dans le forum Langage
    Réponses: 2
    Dernier message: 26/12/2006, 14h23
  3. [XSLT][PHP] Extraction d'informations d'un XML
    Par H¤N£y dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 10/12/2006, 10h05
  4. retour d'information via un script PHP
    Par jpboogie dans le forum Flash
    Réponses: 3
    Dernier message: 16/09/2006, 13h28
  5. Extraction d'informations
    Par sam.fet dans le forum Linux
    Réponses: 2
    Dernier message: 15/06/2006, 17h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo