Chercher dans un fichier en PHP
recome
Messages postés
15
Date d'inscription
Statut
Membre
Dernière intervention
-
Alain_42 Messages postés 5361 Date d'inscription Statut Membre Dernière intervention -
Alain_42 Messages postés 5361 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis actuellement sur un projet qui me prend pas mal de temps.
J'ai un fichier de logs que je doit exploiter.
Ce fichier se présente comme suis :
Sep 13 09:19:08 max4000-3 ASCEND: slot 9 port 7, line 1, channel 32, Call Connected, MBID 106 [MBID 106; ->02********]
Sep 13 09:19:08 max4000-3 ASCEND: call 79 AN slot 9 port 7 64K 02********
Sep 13 09:19:13 max4000-3 ASCEND: slot 9 port 7, LAN session up, nomsite1 [MBID 106; ->02********]
Sep 13 09:19:44 max4000-3 Backoff Q full, discarding user rnisstrasbourgvendeihem[38*******]
Sep 13 09:20:14 max4000-3 ASCEND: call 79 CL 0K u=nomsite1 c=45 p=60 s=64000 r=64000 h=80.***.***.***
Sep 13 09:20:14 max4000-3 ASCEND: slot 9 port 7, line 1, channel 32, Call Disconnected [MBID 106; ->02********]
Sep 13 09:20:14 max4000-3 ASCEND: slot 9 port 7, Call Terminated [MBID 106; ->02********]
Sep 13 09:20:14 max4000-3 ASCEND: slot 0 port 0, LAN session down, nomsite1 [MBID 106; ->02********]
Sep 13 09:20:14 max4000-3 Conn=("nomsite1" ?->02******** PPP 64000/64000 60/45) Auth=(6 190/9 186/10) Sess=(60 264/11 451/16)
Sep 13 09:20:54 max4000-3 ASCEND: slot 0 port 0, line 1, channel 7, Incoming Call, MBID 107 [MBID 107; ->02********]
Sep 13 09:20:54 max4000-3 ASCEND: slot 9 port 7, Assigned to port, MBID 107 [MBID 107; ->02********]
Sep 13 09:20:54 max4000-3 ASCEND: slot 9 port 7, line 1, channel 7, Call Connected, MBID 107 [MBID 107; ->02********]
Sep 13 09:20:54 max4000-3 ASCEND: call 80 AN slot 9 port 7 64K 02********
Sep 13 09:20:59 max4000-3 ASCEND: slot 9 port 7, LAN session up, nomsite2 [MBID 107; ->02********]
Sep 13 09:21:21 max4000-3 ASCEND: slot 0 port 0, line 1, channel 25, Incoming Call, MBID 108 [MBID 108; ->02********]
Sep 13 09:21:21 max4000-3 ASCEND: slot 9 port 9, Assigned to port, MBID 108 [MBID 108; ->02********]
Sep 13 09:21:21 max4000-3 ASCEND: slot 9 port 9, line 1, channel 25, Call Connected, MBID 108 [MBID 108; ->02********]
Sep 13 09:21:21 max4000-3 ASCEND: call 81 AN slot 9 port 9 64K 02********
Sep 13 09:21:27 max4000-3 ASCEND: slot 9 port 9, LAN session up, nomsite3 [MBID 108; ->02********]
Sep 13 09:22:27 max4000-3 ASCEND: call 81 CL 0K u=nomsite3 c=45 p=60 s=64000 r=64000 h=80.***.***.***
Sep 13 09:22:27 max4000-3 ASCEND: slot 9 port 9, line 1, channel 25, Call Disconnected [MBID 108; ->02********]
Sep 13 09:22:27 max4000-3 ASCEND: slot 9 port 9, Call Terminated [MBID 108; ->0272640820]
Sep 13 09:22:27 max4000-3 ASCEND: slot 0 port 0, LAN session down, nomsite3 [MBID 108; ->02********]
Sep 13 09:22:27 max4000-3 Conn=("nomsite3" ?->02******** PPP 64000/64000 60/45) Auth=(6 189/9 186/10) Sess=(60 263/11 308/12)
Et ce sur plusieurs milliers de lignes.
EXPLICATION DES LOGS :
Sep 13 09:19:13 max4000-3 ASCEND: slot 9 port 7, LAN session up, nomsite1 [MBID 106; ->02********]
Ce sont les logs d'une connexion SDSL de plusieurs sites, connexion qui se monte lorsque leur ADSL tombe.
Ainsi, le 13 septembre à 09h19 et 13 secondes, nomsite1 est passé en SDSL.
Sep 13 09:20:14 max4000-3 ASCEND: slot 0 port 0, LAN session down, nomsite1 [MBID 106; ->02********]
Et le 13 Septembre à 09h20 et 14 seconde, l'ADSL est revenu => down de la session LAN.
CE QUE JE VEUX :
Dans l'idée, j'aimerai, à l'aide d'un code en php, clarifier ce fichier en récupérant les informations qui m'intéresse, c'est à dire, quand un site à été en SDSL, et pour combien de temps.
Il faut donc que je récupère toutes les lignes contenant "LAN session up" et toute celles contenant "LAN session down" dans un premier temps.
Une fois ces informations récupérées, je génère un second fichier de log qui se présentera sous cette forme :
Sep 13 09:19:13 max4000-3 ASCEND: slot 9 port 7, LAN session up, nomsite1 [MBID 106; ->02********]
Sep 13 09:20:14 max4000-3 ASCEND: slot 0 port 0, LAN session down, nomsite1 [MBID 106; ->02********]
Et à partir de ce fichier, je souhaiterai récupérer la durée de la connexion SDSL.
Etant débutant en PHP, j'avoue me creuser pas mal les méninges en ce moment.
J'ai déjà trouvé des débuts de piste sur ce forum, comme déjà l'accès à un fichier :
https://www.commentcamarche.net/contents/791-php-les-fichiers
Une recherche assez poussée mais qui à l'inconvénient de tronquer ma ligne, et en plus il faudrai que je sache sur quelles lignes il y a un "LAN session up" ou "LAN session down" :
https://forums.commentcamarche.net/forum/affich-4984334-recuperer-donnees-fichier-txt-php
Je vais continuer à chercher et tenter de faire un pseudo code avec ce que j'ai déjà trouver, mais je suis tout ouïe pour toute proposition pouvant me faciliter la tache.
Au final on aura un truc du genre :
"Robert à branché le SDSL 5 minutes aujourd'hui" en étant passé par certaine étapes (ces étapes me sembles indispensables, mais peut-être que je me trompe également) :
1) ouvrir le fichier
2) trouver tout les "LAN session up" et les "LAN session down"
3) faire le rapport entre les "LAN session up" de robert et les "LAN session down" de Robert (les mettre ensemble quoi, pour pas avoir "robert" et "marlène" qui se collent alors que ya rien à voir
4) mettre en forme une fois ceci fait pour dire "Robert a brancher le SDSL 5 minutes aujourd'hui" et "Marlène l'a branché 6 minutes"
Merci d'avance :)
Je suis actuellement sur un projet qui me prend pas mal de temps.
J'ai un fichier de logs que je doit exploiter.
Ce fichier se présente comme suis :
Sep 13 09:19:08 max4000-3 ASCEND: slot 9 port 7, line 1, channel 32, Call Connected, MBID 106 [MBID 106; ->02********]
Sep 13 09:19:08 max4000-3 ASCEND: call 79 AN slot 9 port 7 64K 02********
Sep 13 09:19:13 max4000-3 ASCEND: slot 9 port 7, LAN session up, nomsite1 [MBID 106; ->02********]
Sep 13 09:19:44 max4000-3 Backoff Q full, discarding user rnisstrasbourgvendeihem[38*******]
Sep 13 09:20:14 max4000-3 ASCEND: call 79 CL 0K u=nomsite1 c=45 p=60 s=64000 r=64000 h=80.***.***.***
Sep 13 09:20:14 max4000-3 ASCEND: slot 9 port 7, line 1, channel 32, Call Disconnected [MBID 106; ->02********]
Sep 13 09:20:14 max4000-3 ASCEND: slot 9 port 7, Call Terminated [MBID 106; ->02********]
Sep 13 09:20:14 max4000-3 ASCEND: slot 0 port 0, LAN session down, nomsite1 [MBID 106; ->02********]
Sep 13 09:20:14 max4000-3 Conn=("nomsite1" ?->02******** PPP 64000/64000 60/45) Auth=(6 190/9 186/10) Sess=(60 264/11 451/16)
Sep 13 09:20:54 max4000-3 ASCEND: slot 0 port 0, line 1, channel 7, Incoming Call, MBID 107 [MBID 107; ->02********]
Sep 13 09:20:54 max4000-3 ASCEND: slot 9 port 7, Assigned to port, MBID 107 [MBID 107; ->02********]
Sep 13 09:20:54 max4000-3 ASCEND: slot 9 port 7, line 1, channel 7, Call Connected, MBID 107 [MBID 107; ->02********]
Sep 13 09:20:54 max4000-3 ASCEND: call 80 AN slot 9 port 7 64K 02********
Sep 13 09:20:59 max4000-3 ASCEND: slot 9 port 7, LAN session up, nomsite2 [MBID 107; ->02********]
Sep 13 09:21:21 max4000-3 ASCEND: slot 0 port 0, line 1, channel 25, Incoming Call, MBID 108 [MBID 108; ->02********]
Sep 13 09:21:21 max4000-3 ASCEND: slot 9 port 9, Assigned to port, MBID 108 [MBID 108; ->02********]
Sep 13 09:21:21 max4000-3 ASCEND: slot 9 port 9, line 1, channel 25, Call Connected, MBID 108 [MBID 108; ->02********]
Sep 13 09:21:21 max4000-3 ASCEND: call 81 AN slot 9 port 9 64K 02********
Sep 13 09:21:27 max4000-3 ASCEND: slot 9 port 9, LAN session up, nomsite3 [MBID 108; ->02********]
Sep 13 09:22:27 max4000-3 ASCEND: call 81 CL 0K u=nomsite3 c=45 p=60 s=64000 r=64000 h=80.***.***.***
Sep 13 09:22:27 max4000-3 ASCEND: slot 9 port 9, line 1, channel 25, Call Disconnected [MBID 108; ->02********]
Sep 13 09:22:27 max4000-3 ASCEND: slot 9 port 9, Call Terminated [MBID 108; ->0272640820]
Sep 13 09:22:27 max4000-3 ASCEND: slot 0 port 0, LAN session down, nomsite3 [MBID 108; ->02********]
Sep 13 09:22:27 max4000-3 Conn=("nomsite3" ?->02******** PPP 64000/64000 60/45) Auth=(6 189/9 186/10) Sess=(60 263/11 308/12)
Et ce sur plusieurs milliers de lignes.
EXPLICATION DES LOGS :
Sep 13 09:19:13 max4000-3 ASCEND: slot 9 port 7, LAN session up, nomsite1 [MBID 106; ->02********]
Ce sont les logs d'une connexion SDSL de plusieurs sites, connexion qui se monte lorsque leur ADSL tombe.
Ainsi, le 13 septembre à 09h19 et 13 secondes, nomsite1 est passé en SDSL.
Sep 13 09:20:14 max4000-3 ASCEND: slot 0 port 0, LAN session down, nomsite1 [MBID 106; ->02********]
Et le 13 Septembre à 09h20 et 14 seconde, l'ADSL est revenu => down de la session LAN.
CE QUE JE VEUX :
Dans l'idée, j'aimerai, à l'aide d'un code en php, clarifier ce fichier en récupérant les informations qui m'intéresse, c'est à dire, quand un site à été en SDSL, et pour combien de temps.
Il faut donc que je récupère toutes les lignes contenant "LAN session up" et toute celles contenant "LAN session down" dans un premier temps.
Une fois ces informations récupérées, je génère un second fichier de log qui se présentera sous cette forme :
Sep 13 09:19:13 max4000-3 ASCEND: slot 9 port 7, LAN session up, nomsite1 [MBID 106; ->02********]
Sep 13 09:20:14 max4000-3 ASCEND: slot 0 port 0, LAN session down, nomsite1 [MBID 106; ->02********]
Et à partir de ce fichier, je souhaiterai récupérer la durée de la connexion SDSL.
Etant débutant en PHP, j'avoue me creuser pas mal les méninges en ce moment.
J'ai déjà trouvé des débuts de piste sur ce forum, comme déjà l'accès à un fichier :
https://www.commentcamarche.net/contents/791-php-les-fichiers
Une recherche assez poussée mais qui à l'inconvénient de tronquer ma ligne, et en plus il faudrai que je sache sur quelles lignes il y a un "LAN session up" ou "LAN session down" :
https://forums.commentcamarche.net/forum/affich-4984334-recuperer-donnees-fichier-txt-php
Je vais continuer à chercher et tenter de faire un pseudo code avec ce que j'ai déjà trouver, mais je suis tout ouïe pour toute proposition pouvant me faciliter la tache.
Au final on aura un truc du genre :
"Robert à branché le SDSL 5 minutes aujourd'hui" en étant passé par certaine étapes (ces étapes me sembles indispensables, mais peut-être que je me trompe également) :
1) ouvrir le fichier
2) trouver tout les "LAN session up" et les "LAN session down"
3) faire le rapport entre les "LAN session up" de robert et les "LAN session down" de Robert (les mettre ensemble quoi, pour pas avoir "robert" et "marlène" qui se collent alors que ya rien à voir
4) mettre en forme une fois ceci fait pour dire "Robert a brancher le SDSL 5 minutes aujourd'hui" et "Marlène l'a branché 6 minutes"
Merci d'avance :)
A voir également:
- Chercher dans un fichier en PHP
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
9 réponses
une piste dans la continuité de ce que tu as commencé:
pour calculer le temps il faut passer par le timestamp Unix de chaque date (c'est le nombre de secondes écoulée depuis le 1/01/1970 pour une date donnée) attention il faut rajouter l'anne
Tu passe par un array pour transformer les mois en nombre (ex: Sept en 09)
$array_mois=array("jan"=>"01","Feb"=>"02" etc..
dans ta boucle
for ($i=0; $i<$nombre_de_lignes; $i++)
a chaque passage
tu calcule le timestamp de la date (vas voir sur G... comment faire)
tu testes l'Etat si up tu memorise dans une variable temporaire $date_up
si down tu soustrait le timstamp à $date_up ce qui te donnes en secondes le temps de connexion
avec la fonction date('H:i:s',$temps) tu auras le temps en H mn sec que tu affiches dans une colonne à côté
pour calculer le temps il faut passer par le timestamp Unix de chaque date (c'est le nombre de secondes écoulée depuis le 1/01/1970 pour une date donnée) attention il faut rajouter l'anne
Tu passe par un array pour transformer les mois en nombre (ex: Sept en 09)
$array_mois=array("jan"=>"01","Feb"=>"02" etc..
dans ta boucle
for ($i=0; $i<$nombre_de_lignes; $i++)
a chaque passage
tu calcule le timestamp de la date (vas voir sur G... comment faire)
tu testes l'Etat si up tu memorise dans une variable temporaire $date_up
si down tu soustrait le timstamp à $date_up ce qui te donnes en secondes le temps de connexion
avec la fonction date('H:i:s',$temps) tu auras le temps en H mn sec que tu affiches dans une colonne à côté
Après quelques recherches, j'ai finalement réussis à organiser mes ligne en ne gardant que mes "LAN session up" et "LAN session down", voici le code :
<?php
$logs = fopen("../maxs.txt", "r+");
$LAN = 'LAN';
while (!feof($logs))
{ //on parcourt toutes les lignes
$ligne_courante = fgets($logs, 4096); // lecture du contenu de la ligne
$pos = strpos($ligne_courante, $LAN);
if ($pos === false)
{
}
else
{
echo $ligne_courante;
?>
<br/>
<?php
}
}
?>
Ce qui m'affiche bien :
Sep 13 06:32:49 max4000-3 ASCEND: slot 9 port 7, LAN session up, site1 [MBID 96; 47*******->08********]
Sep 13 06:40:23 max4000-3 ASCEND: slot 0 port 0, LAN session down, site1 [MBID 96; 47*******->08********]
Sep 13 06:54:13 max4000-3 ASCEND: slot 9 port 7, LAN session up, site2 [MBID 97; 24*******->08********]
Sep 13 06:56:14 max4000-3 ASCEND: slot 0 port 0, LAN session down, site2 [MBID 97; 24*******->08********]
Merci à Pojo qui m'a orienté, sans me donner le code, dans mes recherche en me disant quelles fonctions utiliser.
https://www.php.net/manual/fr/function.fgets.php
https://phpsources.net/
sont les deux sites qui m'ont permis d'arriver à ce résultat.
Il me reste donc à exploiter ces résultats, donc les enregistrer quelque part pour y revenir afin de ne récupérer que les informations pertinentes :
L'heure de connexion et le site qui à été connecté de telle heure à telle heure.
<?php
$logs = fopen("../maxs.txt", "r+");
$LAN = 'LAN';
while (!feof($logs))
{ //on parcourt toutes les lignes
$ligne_courante = fgets($logs, 4096); // lecture du contenu de la ligne
$pos = strpos($ligne_courante, $LAN);
if ($pos === false)
{
}
else
{
echo $ligne_courante;
?>
<br/>
<?php
}
}
?>
Ce qui m'affiche bien :
Sep 13 06:32:49 max4000-3 ASCEND: slot 9 port 7, LAN session up, site1 [MBID 96; 47*******->08********]
Sep 13 06:40:23 max4000-3 ASCEND: slot 0 port 0, LAN session down, site1 [MBID 96; 47*******->08********]
Sep 13 06:54:13 max4000-3 ASCEND: slot 9 port 7, LAN session up, site2 [MBID 97; 24*******->08********]
Sep 13 06:56:14 max4000-3 ASCEND: slot 0 port 0, LAN session down, site2 [MBID 97; 24*******->08********]
Merci à Pojo qui m'a orienté, sans me donner le code, dans mes recherche en me disant quelles fonctions utiliser.
https://www.php.net/manual/fr/function.fgets.php
https://phpsources.net/
sont les deux sites qui m'ont permis d'arriver à ce résultat.
Il me reste donc à exploiter ces résultats, donc les enregistrer quelque part pour y revenir afin de ne récupérer que les informations pertinentes :
L'heure de connexion et le site qui à été connecté de telle heure à telle heure.
Après quelques recherches et une intervention de Tyranoweb qui m'a orienté sur la fonction "explode" (http://www.manuelphp.com/php/function.explode.php voilà ce que donne le code actuel :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<title>Forum</title>
</head>
<body>
<?php
$logs = fopen("../maxs.txt", "r");
$LAN = 'LAN';
$i = 0;
$recapitulatif = array (
"Nom_du_site" => "",
"Mois" => "",
"Jour" => "",
"Heure" => "",
"Etat" => "");
while (!feof($logs))
{ //on parcourt toutes les lignes
$ligne_courante = fgets($logs, 4096); // lecture du contenu de la ligne
$pos = strpos($ligne_courante, $LAN); // Recherche de toutes les lignes comprenant la valeur "LAN"
if ($pos === false)
{ // Si une ligne ne comprend pas la valeur LAN, on ne fait rien
}
else
{
$valeur_intermediaire = explode(" ", $ligne_courante); // On découpe chaque valeur de la ligne comprenant "LAN" dans l'array $valeur_intermediaire
// On remplie notre tableau récapitulatif
$recapitulatif['Nom_du_site'][$i] = $valeur_intermediaire[12];
$recapitulatif['Mois'][$i] = $valeur_intermediaire[0];
$recapitulatif['Jour'][$i] = $valeur_intermediaire[1];
$recapitulatif['Heure'][$i] = $valeur_intermediaire[2];
$recapitulatif['Etat'][$i] = $valeur_intermediaire[11];
$i++;
}
}
$nombre_de_lignes = $i;
?>
<table>
<caption>Tableau récapitulatif</caption>
<thead> <!-- En-tête du tableau -->
<tr>
<th>Mois</th>
<th>Jour</th>
<th>Heure</th>
<th>Etat</th>
<th>Nom du site</th>
</tr>
</thead>
<tbody> <!-- Corps du tableau -->
<?php for ($i=0; $i<$nombre_de_lignes; $i++)
{
?>
<tr>
<td><?php echo $recapitulatif['Mois'][$i] ?></td>
<td><?php echo $recapitulatif['Jour'][$i] ?></td>
<td><?php echo $recapitulatif['Heure'][$i] ?></td>
<td><?php echo $recapitulatif['Etat'][$i] ?></td>
<td><?php echo $recapitulatif['Nom_du_site'][$i] ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
</body>
</html>
Et voilà ce que ça donne visuellement :
https://imageshack.com/
Il me reste donc à trouver une fonction me permettant de transformer mon heure, ou un truc qui me permette de calculer le temps entre un up et un down pour un même site.
Ce qui me permettrait de pouvoir dire "Robert à utilisé le SDSL pendant X (heure/minutes/secondes) tel jour".
Je vais soir pour une fonction de mon côté, mais si quelqu'un a une piste à me donner, qu'il n'hésite pas !!!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<title>Forum</title>
</head>
<body>
<?php
$logs = fopen("../maxs.txt", "r");
$LAN = 'LAN';
$i = 0;
$recapitulatif = array (
"Nom_du_site" => "",
"Mois" => "",
"Jour" => "",
"Heure" => "",
"Etat" => "");
while (!feof($logs))
{ //on parcourt toutes les lignes
$ligne_courante = fgets($logs, 4096); // lecture du contenu de la ligne
$pos = strpos($ligne_courante, $LAN); // Recherche de toutes les lignes comprenant la valeur "LAN"
if ($pos === false)
{ // Si une ligne ne comprend pas la valeur LAN, on ne fait rien
}
else
{
$valeur_intermediaire = explode(" ", $ligne_courante); // On découpe chaque valeur de la ligne comprenant "LAN" dans l'array $valeur_intermediaire
// On remplie notre tableau récapitulatif
$recapitulatif['Nom_du_site'][$i] = $valeur_intermediaire[12];
$recapitulatif['Mois'][$i] = $valeur_intermediaire[0];
$recapitulatif['Jour'][$i] = $valeur_intermediaire[1];
$recapitulatif['Heure'][$i] = $valeur_intermediaire[2];
$recapitulatif['Etat'][$i] = $valeur_intermediaire[11];
$i++;
}
}
$nombre_de_lignes = $i;
?>
<table>
<caption>Tableau récapitulatif</caption>
<thead> <!-- En-tête du tableau -->
<tr>
<th>Mois</th>
<th>Jour</th>
<th>Heure</th>
<th>Etat</th>
<th>Nom du site</th>
</tr>
</thead>
<tbody> <!-- Corps du tableau -->
<?php for ($i=0; $i<$nombre_de_lignes; $i++)
{
?>
<tr>
<td><?php echo $recapitulatif['Mois'][$i] ?></td>
<td><?php echo $recapitulatif['Jour'][$i] ?></td>
<td><?php echo $recapitulatif['Heure'][$i] ?></td>
<td><?php echo $recapitulatif['Etat'][$i] ?></td>
<td><?php echo $recapitulatif['Nom_du_site'][$i] ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
</body>
</html>
Et voilà ce que ça donne visuellement :
https://imageshack.com/
Il me reste donc à trouver une fonction me permettant de transformer mon heure, ou un truc qui me permette de calculer le temps entre un up et un down pour un même site.
Ce qui me permettrait de pouvoir dire "Robert à utilisé le SDSL pendant X (heure/minutes/secondes) tel jour".
Je vais soir pour une fonction de mon côté, mais si quelqu'un a une piste à me donner, qu'il n'hésite pas !!!
Merci pour l'aide.
J'ai maintenant ceci comme code :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<title>Forum</title>
</head>
<body>
<?php // On définit notre fuseau horaire
date_default_timezone_set('Europe/Paris');
if (date_default_timezone_get()) {
echo 'date_default_timezone_set : ' . date_default_timezone_get() . '<br />';
}
if (ini_get('date.timezone')) {
echo 'date.timezone : ' . ini_get('date.timezone');
}
?>
<?php // On récupère l'année à laquelle on lance le script
$aujourd_hui = date("Y-M-D");
$valeur_intermediaire2 = explode("-", $aujourd_hui);
$annee_actuelle = $valeur_intermediaire2[0];
?>
<?php // Ouverture du fichier contenant les logs en lecture seule
$logs = fopen("../maxs.txt", "r");
$LAN = 'LAN session';
$i = 0;
$j = 0;
$nombre_de_ID_up = 0;
$nombre_de_ID_down = 0;
$recapitulatif = array ( // Tableau récapitulatif des informations récupérées
"Nom_du_site" => "",
"Mois" => "",
"Jour" => "",
"Heure" => "",
"Etat" => "",
"ID_de_connexion" => "",
"Date_timestamp" => "");
$calcul_temps_de_connexion = array ( // Tableau qui va servir à calculer le temps de connexion
"ID_up" => "",
"ID_down" => "",
"Timestamp_up" => "",
"Timestamp_down" => "",
"Temps_de_connexion" => "");
while (!feof($logs))
{ //on parcourt toutes les lignes
$ligne_courante = fgets($logs, 4096); // lecture du contenu de la ligne
$pos = strpos($ligne_courante, $LAN); // Recherche de toutes les lignes comprenant la valeur "LAN"
if ($pos === false)
{ // Si une ligne ne comprend pas la valeur LAN, on ne fait rien
}
else
{
$valeur_intermediaire = explode(" ", $ligne_courante); // On découpe chaque valeur de la ligne comprenant "LAN" dans l'array $valeur_intermediaire
// On remplit notre tableau récapitulatif
$recapitulatif['Nom_du_site'][$i] = $valeur_intermediaire[12];
$recapitulatif['Mois'][$i] = $valeur_intermediaire[0];
$recapitulatif['Jour'][$i] = $valeur_intermediaire[1];
$recapitulatif['Heure'][$i] = $valeur_intermediaire[2];
$recapitulatif['Etat'][$i] = $valeur_intermediaire[11];
// On récupère l'ID de connexion en virant le ";"
$valeur_intermediaire3 = explode(";", $valeur_intermediaire[14]);
$recapitulatif['ID_de_connexion'][$i] = $valeur_intermediaire3[0];
// On convertit notre mois en numérique
if ($recapitulatif['Mois'][$i] == "Jan")
{
$recapitulatif['Mois'][$i] = '01';
}
else if ($recapitulatif['Mois'][$i] == "Feb")
{
$recapitulatif['Mois'][$i] = '02';
}
else if ($recapitulatif['Mois'][$i] == "Mar")
{
$recapitulatif['Mois'][$i] = '03';
}
else if ($recapitulatif['Mois'][$i] == "Apr")
{
$recapitulatif['Mois'][$i] = '04';
}
else if ($recapitulatif['Mois'][$i] == "May")
{
$recapitulatif['Mois'][$i] = '05';
}
else if ($recapitulatif['Mois'][$i] == "Jun")
{
$recapitulatif['Mois'][$i] = '06';
}
else if ($recapitulatif['Mois'][$i] == "Jul")
{
$recapitulatif['Mois'][$i] = '07';
}
else if ($recapitulatif['Mois'][$i] == "Aug")
{
$recapitulatif['Mois'][$i] = '08';
}
else if ($recapitulatif['Mois'][$i] == "Sep")
{
$recapitulatif['Mois'][$i] = '09';
}
else if ($recapitulatif['Mois'][$i] == "Oct")
{
$recapitulatif['Mois'][$i] = '10';
}
else if ($recapitulatif['Mois'][$i] == "Nov")
{
$recapitulatif['Mois'][$i] = '11';
}
else if ($recapitulatif['Mois'][$i] == "Dec")
{
$recapitulatif['Mois'][$i] = '12';
}
else
{
echo "Erreur";
}
// On convertit nos date en timestamp
$valeur_intermediaire4 = $annee_actuelle . "-" . $recapitulatif['Mois'][$i] . "-" . $recapitulatif['Jour'][$i] . " " . $recapitulatif['Heure'][$i];
$recapitulatif['Date_timestamp'][$i] = strtotime ($valeur_intermediaire4);
$i++;
}
}
$nombre_de_lignes = $i;
?>
<?php
for ($i=0; $i<$nombre_de_lignes; $i++)
{
if ($recapitulatif['Etat'][$i] == "up,")
{
$calcul_temps_de_connexion['ID_up'][$i] = $recapitulatif['ID_de_connexion'][$i];
$calcul_temps_de_connexion['Timestamp_up'][$i] = $recapitulatif['Date_timestamp'][$i];
$nombre_de_ID_up++;
}
else if ($recapitulatif['Etat'][$i] == "down,")
{
$calcul_temps_de_connexion['ID_down'][$i] = $recapitulatif['ID_de_connexion'][$i];
$calcul_temps_de_connexion['Timestamp_down'][$i] = $recapitulatif['Date_timestamp'][$i];
$nombre_de_ID_down++;
}
else
{ // On repère l'erreur
echo ("Erreur");
echo $i;
echo $recapitulatif['Etat'][$i];
}
}
?>
<?php
?>
<table>
<caption>Tableau récapitulatif</caption>
<thead> <!-- En-tête du tableau -->
<tr>
<th>Mois</th>
<th>Jour</th>
<th>Heure</th>
<th>Etat</th>
<th>Nom du site</th>
<th>ID de connexion</th>
<th>Date Timestamp</th>
</tr>
</thead>
<tbody> <!-- Corps du tableau -->
<?php for ($i=0; $i<$nombre_de_lignes; $i++)
{ // Affichage et remplissage du tableau
?>
<tr>
<td><?php echo $recapitulatif['Mois'][$i] ?></td>
<td><?php echo $recapitulatif['Jour'][$i] ?></td>
<td><?php echo $recapitulatif['Heure'][$i] ?></td>
<td><?php echo $recapitulatif['Etat'][$i] ?></td>
<td><?php echo $recapitulatif['Nom_du_site'][$i] ?></td>
<td><?php echo $recapitulatif['ID_de_connexion'][$i] ?></td>
<td><?php echo $recapitulatif['Date_timestamp'][$i] ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
</body>
</html>
Je vais détailler un peu :
<?php // On définit notre fuseau horaire
date_default_timezone_set('Europe/Paris');
if (date_default_timezone_get()) {
echo 'date_default_timezone_set : ' . date_default_timezone_get() . '<br />';
}
if (ini_get('date.timezone')) {
echo 'date.timezone : ' . ini_get('date.timezone');
}
?>
Celà me permet de me positionner sur le fuseau horaire de Paris, je ne sais pas si cette fonction est indispensable, dans le doute, je l'ai mise.
Source : http://fr2.php.net/manual/fr/function.date-default-timezone-get.php
<?php // On récupère l'année à laquelle on lance le script
$aujourd_hui = date("Y-M-D");
$valeur_intermediaire2 = explode("-", $aujourd_hui);
$annee_actuelle = $valeur_intermediaire2[0];
?>
Me permet de récupérer par la suite l'année où le script est lancé.
Source : https://www.php.net/manual/fr/function.date.php
if ($recapitulatif['Mois'][$i] == "Jan")
{
$recapitulatif['Mois'][$i] = '01';
}
else if ($recapitulatif['Mois'][$i] == "Feb")
{
$recapitulatif['Mois'][$i] = '02';
}
else if ($recapitulatif['Mois'][$i] == "Mar")
{
$recapitulatif['Mois'][$i] = '03';
}
else if ($recapitulatif['Mois'][$i] == "Apr")
{
$recapitulatif['Mois'][$i] = '04';
}
else if ($recapitulatif['Mois'][$i] == "May")
{
$recapitulatif['Mois'][$i] = '05';
}
else if ($recapitulatif['Mois'][$i] == "Jun")
{
$recapitulatif['Mois'][$i] = '06';
}
else if ($recapitulatif['Mois'][$i] == "Jul")
{
$recapitulatif['Mois'][$i] = '07';
}
else if ($recapitulatif['Mois'][$i] == "Aug")
{
$recapitulatif['Mois'][$i] = '08';
}
else if ($recapitulatif['Mois'][$i] == "Sep")
{
$recapitulatif['Mois'][$i] = '09';
}
else if ($recapitulatif['Mois'][$i] == "Oct")
{
$recapitulatif['Mois'][$i] = '10';
}
else if ($recapitulatif['Mois'][$i] == "Nov")
{
$recapitulatif['Mois'][$i] = '11';
}
else if ($recapitulatif['Mois'][$i] == "Dec")
{
$recapitulatif['Mois'][$i] = '12';
}
else
{
echo "Erreur";
}
Ce code (ci-dessus) me permet de numériser mes mois.
// On convertit nos date en timestamp
$valeur_intermediaire4 = $annee_actuelle . "-" . $recapitulatif['Mois'][$i] . "-" . $recapitulatif['Jour'][$i] . " " . $recapitulatif['Heure'][$i];
$recapitulatif['Date_timestamp'][$i] = strtotime ($valeur_intermediaire4);
Celui-ci (ci-dessus) me permet de convertir mes dates / heure en timestamp.
(J'avoue que cette fonction m'a prit du temps, quelle joie de voir qua ça à marché :D)
J'ai trouver la fonction strtotim grâce à Pojo : https://www.php.net/manual/fr/function.strtotime.php
Maintenant j'ai :
https://imageshack.com/
Là où je bloque actuellement, c'est pour vérifier (afin de faire la soustraction) si un site qui à été up un moment donnée à bien été down à un autre moment (sinon il ne faut pas faire le calcul).
Or vu que plusieurs sites peuvent avoirs monté plusieurs fois une connexion, il faut que je me base pas sur le nom du site qui est monté en SDSL mais sur son ID de connexion (c'est la 6ème colonne que vous voyez sur la capture).
J'ai donc pensez à prendre tout les ID de connexion up et tout les ID de connexion down et de les enregistrer dans un nouvel array, ce qui donne :
$calcul_temps_de_connexion = array ( // Tableau qui va servir à calculer le temps de connexion
"ID_up" => "",
"ID_down" => "",
"Timestamp_up" => "",
"Timestamp_down" => "",
"Temps_de_connexion" => "");
Le code remplissant cet array est le suivant :
<?php
for ($i=0; $i<$nombre_de_lignes; $i++)
{
if ($recapitulatif['Etat'][$i] == "up,")
{
$calcul_temps_de_connexion['ID_up'][$i] = $recapitulatif['ID_de_connexion'][$i];
$calcul_temps_de_connexion['Timestamp_up'][$i] = $recapitulatif['Date_timestamp'][$i];
$nombre_de_ID_up++;
}
else if ($recapitulatif['Etat'][$i] == "down,")
{
$calcul_temps_de_connexion['ID_down'][$i] = $recapitulatif['ID_de_connexion'][$i];
$calcul_temps_de_connexion['Timestamp_down'][$i] = $recapitulatif['Date_timestamp'][$i];
$nombre_de_ID_down++;
}
else
{ // On repère l'erreur
echo ("Erreur");
echo $i;
echo $recapitulatif['Etat'][$i];
}
}
?>
Cependant, lorsque je veux vérifier si l'id est le bon, et que donc on peut faire le calcul, je passe par une boucle comme suis :
<?php
for ($i=0; $i<$nombre_de_ID_up; $i++)
{
for ($j=0; $j<$nombre_de_ID_down; $j++)
{
if ($calcul_temps_de_connexion['ID_up'][$i] == $calcul_temps_de_connexion['ID_down'][$j])
{
echo ("Youpie"); // on va tester si ça marche avant de coder la soustraction
}
else
{
echo ("Il manque un paramètre de connection");
}
}
}
?>
En gros ce code test si l'ID de la connexion qui est up est egal à l'ID de la connexion qui est down, si il est egal, alors on a les deux paramètres, on peut donc faire nos calculs, sinon, on dit qu'il nous manque une info.
(Car pour certaines connexions ADSL j'ai des date de down sans date de up, et des date de up sans les dates de down xD).
Le problème, c'est qu'il me repère toujours une erreur sur la ligne soulignée : (capture d'écran car bug de firefox donc ^^
https://imageshack.com/
(Pourtant j'ai vérifié et revérifié mon code, toutes les variables existent (ou alors j'ai mal compris le message d'erreur), de plus le script est incroyablement long et fait la plupart du temps bugger mozilla.
Donc mes question, est ce que je m'y prend de la bonne manière pour vérifier qu'un ID up à le même ID down.
Voili voilou :)
Sinon, explication de cette ligne :
// On récupère l'ID de connexion en virant le ";"
$valeur_intermediaire3 = explode(";", $valeur_intermediaire[14]);
$recapitulatif['ID_de_connexion'][$i] = $valeur_intermediaire3[0];
Mes ID de connexions étaient de la forme "96;", donc imbrication de explode pour les virer x)
ça se trouve il y avait plus simple mais j'avoue que je m'était pas mal trituré les méninges pour arriver à ça ^^
Merci encore !
J'ai maintenant ceci comme code :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<title>Forum</title>
</head>
<body>
<?php // On définit notre fuseau horaire
date_default_timezone_set('Europe/Paris');
if (date_default_timezone_get()) {
echo 'date_default_timezone_set : ' . date_default_timezone_get() . '<br />';
}
if (ini_get('date.timezone')) {
echo 'date.timezone : ' . ini_get('date.timezone');
}
?>
<?php // On récupère l'année à laquelle on lance le script
$aujourd_hui = date("Y-M-D");
$valeur_intermediaire2 = explode("-", $aujourd_hui);
$annee_actuelle = $valeur_intermediaire2[0];
?>
<?php // Ouverture du fichier contenant les logs en lecture seule
$logs = fopen("../maxs.txt", "r");
$LAN = 'LAN session';
$i = 0;
$j = 0;
$nombre_de_ID_up = 0;
$nombre_de_ID_down = 0;
$recapitulatif = array ( // Tableau récapitulatif des informations récupérées
"Nom_du_site" => "",
"Mois" => "",
"Jour" => "",
"Heure" => "",
"Etat" => "",
"ID_de_connexion" => "",
"Date_timestamp" => "");
$calcul_temps_de_connexion = array ( // Tableau qui va servir à calculer le temps de connexion
"ID_up" => "",
"ID_down" => "",
"Timestamp_up" => "",
"Timestamp_down" => "",
"Temps_de_connexion" => "");
while (!feof($logs))
{ //on parcourt toutes les lignes
$ligne_courante = fgets($logs, 4096); // lecture du contenu de la ligne
$pos = strpos($ligne_courante, $LAN); // Recherche de toutes les lignes comprenant la valeur "LAN"
if ($pos === false)
{ // Si une ligne ne comprend pas la valeur LAN, on ne fait rien
}
else
{
$valeur_intermediaire = explode(" ", $ligne_courante); // On découpe chaque valeur de la ligne comprenant "LAN" dans l'array $valeur_intermediaire
// On remplit notre tableau récapitulatif
$recapitulatif['Nom_du_site'][$i] = $valeur_intermediaire[12];
$recapitulatif['Mois'][$i] = $valeur_intermediaire[0];
$recapitulatif['Jour'][$i] = $valeur_intermediaire[1];
$recapitulatif['Heure'][$i] = $valeur_intermediaire[2];
$recapitulatif['Etat'][$i] = $valeur_intermediaire[11];
// On récupère l'ID de connexion en virant le ";"
$valeur_intermediaire3 = explode(";", $valeur_intermediaire[14]);
$recapitulatif['ID_de_connexion'][$i] = $valeur_intermediaire3[0];
// On convertit notre mois en numérique
if ($recapitulatif['Mois'][$i] == "Jan")
{
$recapitulatif['Mois'][$i] = '01';
}
else if ($recapitulatif['Mois'][$i] == "Feb")
{
$recapitulatif['Mois'][$i] = '02';
}
else if ($recapitulatif['Mois'][$i] == "Mar")
{
$recapitulatif['Mois'][$i] = '03';
}
else if ($recapitulatif['Mois'][$i] == "Apr")
{
$recapitulatif['Mois'][$i] = '04';
}
else if ($recapitulatif['Mois'][$i] == "May")
{
$recapitulatif['Mois'][$i] = '05';
}
else if ($recapitulatif['Mois'][$i] == "Jun")
{
$recapitulatif['Mois'][$i] = '06';
}
else if ($recapitulatif['Mois'][$i] == "Jul")
{
$recapitulatif['Mois'][$i] = '07';
}
else if ($recapitulatif['Mois'][$i] == "Aug")
{
$recapitulatif['Mois'][$i] = '08';
}
else if ($recapitulatif['Mois'][$i] == "Sep")
{
$recapitulatif['Mois'][$i] = '09';
}
else if ($recapitulatif['Mois'][$i] == "Oct")
{
$recapitulatif['Mois'][$i] = '10';
}
else if ($recapitulatif['Mois'][$i] == "Nov")
{
$recapitulatif['Mois'][$i] = '11';
}
else if ($recapitulatif['Mois'][$i] == "Dec")
{
$recapitulatif['Mois'][$i] = '12';
}
else
{
echo "Erreur";
}
// On convertit nos date en timestamp
$valeur_intermediaire4 = $annee_actuelle . "-" . $recapitulatif['Mois'][$i] . "-" . $recapitulatif['Jour'][$i] . " " . $recapitulatif['Heure'][$i];
$recapitulatif['Date_timestamp'][$i] = strtotime ($valeur_intermediaire4);
$i++;
}
}
$nombre_de_lignes = $i;
?>
<?php
for ($i=0; $i<$nombre_de_lignes; $i++)
{
if ($recapitulatif['Etat'][$i] == "up,")
{
$calcul_temps_de_connexion['ID_up'][$i] = $recapitulatif['ID_de_connexion'][$i];
$calcul_temps_de_connexion['Timestamp_up'][$i] = $recapitulatif['Date_timestamp'][$i];
$nombre_de_ID_up++;
}
else if ($recapitulatif['Etat'][$i] == "down,")
{
$calcul_temps_de_connexion['ID_down'][$i] = $recapitulatif['ID_de_connexion'][$i];
$calcul_temps_de_connexion['Timestamp_down'][$i] = $recapitulatif['Date_timestamp'][$i];
$nombre_de_ID_down++;
}
else
{ // On repère l'erreur
echo ("Erreur");
echo $i;
echo $recapitulatif['Etat'][$i];
}
}
?>
<?php
?>
<table>
<caption>Tableau récapitulatif</caption>
<thead> <!-- En-tête du tableau -->
<tr>
<th>Mois</th>
<th>Jour</th>
<th>Heure</th>
<th>Etat</th>
<th>Nom du site</th>
<th>ID de connexion</th>
<th>Date Timestamp</th>
</tr>
</thead>
<tbody> <!-- Corps du tableau -->
<?php for ($i=0; $i<$nombre_de_lignes; $i++)
{ // Affichage et remplissage du tableau
?>
<tr>
<td><?php echo $recapitulatif['Mois'][$i] ?></td>
<td><?php echo $recapitulatif['Jour'][$i] ?></td>
<td><?php echo $recapitulatif['Heure'][$i] ?></td>
<td><?php echo $recapitulatif['Etat'][$i] ?></td>
<td><?php echo $recapitulatif['Nom_du_site'][$i] ?></td>
<td><?php echo $recapitulatif['ID_de_connexion'][$i] ?></td>
<td><?php echo $recapitulatif['Date_timestamp'][$i] ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
</body>
</html>
Je vais détailler un peu :
<?php // On définit notre fuseau horaire
date_default_timezone_set('Europe/Paris');
if (date_default_timezone_get()) {
echo 'date_default_timezone_set : ' . date_default_timezone_get() . '<br />';
}
if (ini_get('date.timezone')) {
echo 'date.timezone : ' . ini_get('date.timezone');
}
?>
Celà me permet de me positionner sur le fuseau horaire de Paris, je ne sais pas si cette fonction est indispensable, dans le doute, je l'ai mise.
Source : http://fr2.php.net/manual/fr/function.date-default-timezone-get.php
<?php // On récupère l'année à laquelle on lance le script
$aujourd_hui = date("Y-M-D");
$valeur_intermediaire2 = explode("-", $aujourd_hui);
$annee_actuelle = $valeur_intermediaire2[0];
?>
Me permet de récupérer par la suite l'année où le script est lancé.
Source : https://www.php.net/manual/fr/function.date.php
if ($recapitulatif['Mois'][$i] == "Jan")
{
$recapitulatif['Mois'][$i] = '01';
}
else if ($recapitulatif['Mois'][$i] == "Feb")
{
$recapitulatif['Mois'][$i] = '02';
}
else if ($recapitulatif['Mois'][$i] == "Mar")
{
$recapitulatif['Mois'][$i] = '03';
}
else if ($recapitulatif['Mois'][$i] == "Apr")
{
$recapitulatif['Mois'][$i] = '04';
}
else if ($recapitulatif['Mois'][$i] == "May")
{
$recapitulatif['Mois'][$i] = '05';
}
else if ($recapitulatif['Mois'][$i] == "Jun")
{
$recapitulatif['Mois'][$i] = '06';
}
else if ($recapitulatif['Mois'][$i] == "Jul")
{
$recapitulatif['Mois'][$i] = '07';
}
else if ($recapitulatif['Mois'][$i] == "Aug")
{
$recapitulatif['Mois'][$i] = '08';
}
else if ($recapitulatif['Mois'][$i] == "Sep")
{
$recapitulatif['Mois'][$i] = '09';
}
else if ($recapitulatif['Mois'][$i] == "Oct")
{
$recapitulatif['Mois'][$i] = '10';
}
else if ($recapitulatif['Mois'][$i] == "Nov")
{
$recapitulatif['Mois'][$i] = '11';
}
else if ($recapitulatif['Mois'][$i] == "Dec")
{
$recapitulatif['Mois'][$i] = '12';
}
else
{
echo "Erreur";
}
Ce code (ci-dessus) me permet de numériser mes mois.
// On convertit nos date en timestamp
$valeur_intermediaire4 = $annee_actuelle . "-" . $recapitulatif['Mois'][$i] . "-" . $recapitulatif['Jour'][$i] . " " . $recapitulatif['Heure'][$i];
$recapitulatif['Date_timestamp'][$i] = strtotime ($valeur_intermediaire4);
Celui-ci (ci-dessus) me permet de convertir mes dates / heure en timestamp.
(J'avoue que cette fonction m'a prit du temps, quelle joie de voir qua ça à marché :D)
J'ai trouver la fonction strtotim grâce à Pojo : https://www.php.net/manual/fr/function.strtotime.php
Maintenant j'ai :
https://imageshack.com/
Là où je bloque actuellement, c'est pour vérifier (afin de faire la soustraction) si un site qui à été up un moment donnée à bien été down à un autre moment (sinon il ne faut pas faire le calcul).
Or vu que plusieurs sites peuvent avoirs monté plusieurs fois une connexion, il faut que je me base pas sur le nom du site qui est monté en SDSL mais sur son ID de connexion (c'est la 6ème colonne que vous voyez sur la capture).
J'ai donc pensez à prendre tout les ID de connexion up et tout les ID de connexion down et de les enregistrer dans un nouvel array, ce qui donne :
$calcul_temps_de_connexion = array ( // Tableau qui va servir à calculer le temps de connexion
"ID_up" => "",
"ID_down" => "",
"Timestamp_up" => "",
"Timestamp_down" => "",
"Temps_de_connexion" => "");
Le code remplissant cet array est le suivant :
<?php
for ($i=0; $i<$nombre_de_lignes; $i++)
{
if ($recapitulatif['Etat'][$i] == "up,")
{
$calcul_temps_de_connexion['ID_up'][$i] = $recapitulatif['ID_de_connexion'][$i];
$calcul_temps_de_connexion['Timestamp_up'][$i] = $recapitulatif['Date_timestamp'][$i];
$nombre_de_ID_up++;
}
else if ($recapitulatif['Etat'][$i] == "down,")
{
$calcul_temps_de_connexion['ID_down'][$i] = $recapitulatif['ID_de_connexion'][$i];
$calcul_temps_de_connexion['Timestamp_down'][$i] = $recapitulatif['Date_timestamp'][$i];
$nombre_de_ID_down++;
}
else
{ // On repère l'erreur
echo ("Erreur");
echo $i;
echo $recapitulatif['Etat'][$i];
}
}
?>
Cependant, lorsque je veux vérifier si l'id est le bon, et que donc on peut faire le calcul, je passe par une boucle comme suis :
<?php
for ($i=0; $i<$nombre_de_ID_up; $i++)
{
for ($j=0; $j<$nombre_de_ID_down; $j++)
{
if ($calcul_temps_de_connexion['ID_up'][$i] == $calcul_temps_de_connexion['ID_down'][$j])
{
echo ("Youpie"); // on va tester si ça marche avant de coder la soustraction
}
else
{
echo ("Il manque un paramètre de connection");
}
}
}
?>
En gros ce code test si l'ID de la connexion qui est up est egal à l'ID de la connexion qui est down, si il est egal, alors on a les deux paramètres, on peut donc faire nos calculs, sinon, on dit qu'il nous manque une info.
(Car pour certaines connexions ADSL j'ai des date de down sans date de up, et des date de up sans les dates de down xD).
Le problème, c'est qu'il me repère toujours une erreur sur la ligne soulignée : (capture d'écran car bug de firefox donc ^^
https://imageshack.com/
(Pourtant j'ai vérifié et revérifié mon code, toutes les variables existent (ou alors j'ai mal compris le message d'erreur), de plus le script est incroyablement long et fait la plupart du temps bugger mozilla.
Donc mes question, est ce que je m'y prend de la bonne manière pour vérifier qu'un ID up à le même ID down.
Voili voilou :)
Sinon, explication de cette ligne :
// On récupère l'ID de connexion en virant le ";"
$valeur_intermediaire3 = explode(";", $valeur_intermediaire[14]);
$recapitulatif['ID_de_connexion'][$i] = $valeur_intermediaire3[0];
Mes ID de connexions étaient de la forme "96;", donc imbrication de explode pour les virer x)
ça se trouve il y avait plus simple mais j'avoue que je m'était pas mal trituré les méninges pour arriver à ça ^^
Merci encore !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
j'ai commencé à te faire un script un peu different mais je n'ai pas trop le temps avant mardi, si tu es toujours preneur ?
Si tu es toujours la:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <title>Forum</title> </head> <body> <?php //init parametres $LAN = 'LAN session'; //$array_fichier_utile array contenant seulement les lignes avec LAN session $array_fichier_utile=array(); //$array_resultat array multidimentionnel avec premier niv le ID, 2ieme l'etat, etc... $array_resultat=array(); //tableau de correspondance nom mois=>numero mois $correspondance_mois=array("Jan"=>"01","Feb"=>"02","Mar"=>"03","Apr"=>"04","Mai"=>"05","Jun"=>"06","Jaul"=>"07","Aug"=>"08","Sep"=>"09","Oct"=>"10","Nov"=>"11","Dec"=>"12"); // On récupère l'année en cours $annee_actuelle = date("Y"); //lecture fichier: la fonction file() fait tout (ouvrir lire fermer) et met tout dans un array ligne par ligne $array_fichier=file("../maxs.txt"); //extraction des lignes contenant LAN if(sizeof($array_fichier)>0){ //on réussi a lire le fichier foreach($array_fichier as $cle=>$value){ //on parcours tout l'array ligne par ligne if(preg_match("/".$LAN."/i",$value)){ //on a $LAN dans la ligne on la memorise dans $array_fichier_utile $array_fichier_utile[]=$value; //empile les unes après les autres } } if(sizeof($array_fichier_utile)>0){ //on a trouvé des lignes contenant LAN session on continue //decoupage des lignes foreach($array_fichier_utile as $num_ligne=>$value_ligne){ $array_ligne=explode(',',$value_ligne); //decoupe par rapport aux , //partie site et ID $array_site_id=explode(' ',trim($array_ligne[2])); //decoupe partie site et ID par rapport aux espaces $nom_site=$array_site_id[0]; $id_connexion=substr($array_site_id[2],0,-1);//on ote le ; //partie etat $array_LAN=explode(' ',trim($array_ligne[1])); $etat=$array_LAN[2]; //up ou down //partie dates $array_date=explode(' ',trim($array_ligne[0])); $num_mois=$correspondance_mois[$array_date[0]]; //on recupere le numero du mois dans le tableau de correspondance $jour=$array_date[1]; $array_heure=explode(':',$array_date[2]); $timestamp=mktime($array_heure[0],$array_heure[1],$array_heure[2],$num_mois,$jour,$annee_actuelle); ///on va maintenant empiler tout ça dans un array multidimentionnel: $array_resultat $array_resultat[$nom_site][$etat]=array('ID'=>$id_connexion,'timestamp'=>$timestamp); } }else{ echo 'Aucune ligne ne contient '.$LAN; } }else{ //pb lecture fichier voir chemin, nom etc... echo 'lecture fichier impossible !'; } ?> <table border="1"> <caption>Tableau récapitulatif</caption> <thead> <!-- En-tête du tableau --> <tr> <th>Mois</th> <th>Jour</th> <th>Heure</th> <th>Etat</th> <th>Nom du site</th> <th>ID de connexion</th> <th>Durée</th> </tr> </thead> <tbody> <!-- Corps du tableau --> <?php if(sizeof($array_resultat)>0){ foreach($array_resultat as $site=>$s_array1){ //le premier niveau c'est le site, il a comme sous array up et down (au moins une des deux) foreach($s_array1 as $etat=>$s_array2){ //ex $array_resltat['site1']['up']['96']['123457896'] // Affichage echo '<tr align="center">'; echo '<td>'.date('m',$s_array2['timestamp']).'</td>'; echo '<td>'.date('d',$s_array2['timestamp']).'</td>'; echo '<td>'.date('H:i',$s_array2['timestamp']).'</td>'; echo '<td>'.$etat.'</td>'; echo '<td>'.$site.'</td>'; echo '<td>'.$s_array2['ID'].'</td>'; //afichage durée suivant les cas up sans down, down sans up et enfin si on a les deux on affiche la duree if($etat=='down'){ if(isset($array_resultat[$site]['up'])){ $duree=$s_array1['down']['timestamp']-$s_array1['up']['timestamp']; echo '<td>'.$duree.'</td>'; }else{ echo '<td>pas de up</td>'; } }elseif($etat=='up'){ if(isset($array_resultat[$site]['down'])){ echo "<td> </td>"; //vide si up suivi d'un down }else{ echo "<td>pas de down</td>"; } } echo '</tr>'; } } } ?> </tbody> </table> </body> </html>
Merci beaucoup, je test ça demain sur mon ordi de travail, là je n'ai pas les fichiers nécessaires.
A demain donc :)
A demain donc :)
Ok par contre si un site apparait plusieurs fois en up et en down le script que je t'ai fait va poser problème, si c'est le cas il faudra que je te fasse une modif pour en tenir compte
J'ai amélioré un peu le script pour traiter les cas particuliers, sites apparaissant plusieurs fois, down sans up up sans down etc
voilà:
voilà:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <title>Forum</title> </head> <body> <?php //init parametres $LAN = 'LAN session'; //$array_fichier_utile array contenant seulement les lignes avec LAN session $array_fichier_utile=array(); //$array_resultat array multidimentionnel avec premier niv le ID, 2ieme l'etat, etc... $array_resultat=array(); //tableau de correspondance nom mois=>numero mois $correspondance_mois=array("Jan"=>"01","Feb"=>"02","Mar"=>"03","Apr"=>"04","Mai"=>"05","Jun"=>"06","Jaul"=>"07","Aug"=>"08","Sep"=>"09","Oct"=>"10","Nov"=>"11","Dec"=>"12"); // On récupère l'année en cours $annee_actuelle = date("Y"); //fonction php pour transfo secondes en jours heures minutes et secondes function transforme($time){ if ($time>=86400){ //si le nombre contient des jours $jour = floor($time/86400); $reste = $time%86400; $heure = floor($reste/3600); $reste = $reste%3600; $minute = floor($reste/60); $seconde = $reste%60; // on rassemble les résultats en forme de date $result = $jour.'j '.$heure.'h '.$minute.'min '.$seconde.'s'; } elseif ($time < 86400 AND $time>=3600){ // si le nombre de secondes ne contient pas de jours mais contient des heures $heure = floor($time/3600); $reste = $time%3600; $minute = floor($reste/60); $seconde = $reste%60; $result = $heure.'h '.$minute.'min '.$seconde.' s'; }elseif ($time<3600 AND $time>=60){ // si le nombre de secondes ne contient pas d'heures mais contient des minutes $minute = floor($time/60); $seconde = $time%60; $result = $minute.'min '.$seconde.'s'; }elseif ($time < 60){ // si le nombre de secondes ne contient aucune minutes $result = $time.'s'; } return $result; } ///fin fonction //lecture fichier: la fonction file() fait tout (ouvrir lire fermer) et met tout dans un array ligne par ligne $array_fichier=file("../maxs.txt"); //extraction des lignes contenant LAN if(sizeof($array_fichier)>0){ //on réussi a lire le fichier foreach($array_fichier as $cle=>$value){ //on parcours tout l'array ligne par ligne if(preg_match("/".$LAN."/i",$value)){ //on a $LAN dans la ligne on la memorise dans $array_fichier_utile $array_fichier_utile[]=$value; //empile les unes après les autres } } if(sizeof($array_fichier_utile)>0){ //on a trouvé des lignes contenant LAN session on continue //l'array_resultat aura un niveau suplémentaire $array_resultat[$nom_site][$index][$etat] //array pour memorisation des index d'un même site, pour s'y retrouver un peu a cause des cas ou pas de down ou pas de up $array_memo_index=array(); //decoupage des lignes foreach($array_fichier_utile as $num_ligne=>$value_ligne){ $array_ligne=explode(',',$value_ligne); //decoupe par rapport aux , //partie site et ID $array_site_id=explode(' ',trim($array_ligne[2])); //decoupe partie site et ID par rapport aux espaces $nom_site=$array_site_id[0]; $id_connexion=substr($array_site_id[2],0,-1);//on ote le ; //partie etat $array_LAN=explode(' ',trim($array_ligne[1])); $etat=$array_LAN[2]; //up ou down //partie dates $array_date=explode(' ',trim($array_ligne[0])); $num_mois=$correspondance_mois[$array_date[0]]; //on recupere le numero du mois dans le tableau de correspondance $jour=$array_date[1]; $array_heure=explode(':',$array_date[2]); $timestamp=mktime($array_heure[0],$array_heure[1],$array_heure[2],$num_mois,$jour,$annee_actuelle); //gestion $index if(isset($array_resultat[$nom_site])){ //n ieme apparition du site dans le listing if($etat=='up'){ //si ce up suit un autre up on incremente index memorise dans le up de 1 //si un down sans up avant on incremente index memorise dans le down $index=isset($array_memo_index[$nom_site]['up'])? $array_memo_index[$nom_site]['up']+1 : $array_memo_index[$nom_site]['down']+1; } if($etat=='down'){ if(isset($array_memo_index[$nom_site]['up']) && isset($array_memo_index[$nom_site]['down'])){ //si ce down suit un up on conserve index memorise dans le up if($array_memo_index[$nom_site]['up']>$array_memo_index[$nom_site]['down']){ $index=$array_memo_index[$nom_site]['up']; } //si un down sans up avant on incremente index memorise dans le down precedent if($array_memo_index[$nom_site]['up']<=$array_memo_index[$nom_site]['down']){ $index=$array_memo_index[$nom_site]['down']+1; } } } }else{ //premier apparation du site dans le listing donc index=0 $index=0; } $array_memo_index[$nom_site][$etat]=$index; ///on va maintenant empiler tout ça dans un array multidimentionnel: $array_resultat $array_resultat[$nom_site][$index][$etat]=array('ID'=>$id_connexion,'timestamp'=>$timestamp); } }else{ echo 'Aucune ligne ne contient '.$LAN; } }else{ //pb lecture fichier voir chemin, nom etc... echo 'lecture fichier impossible !'; } ?> <table border="1"> <caption>Tableau récapitulatif</caption> <thead> <!-- En-tête du tableau --> <tr> <th>Mois</th> <th>Jour</th> <th>Heure</th> <th>Etat</th> <th>Nom du site</th> <th>ID de connexion</th> <th>Durée</th> </tr> </thead> <tbody> <!-- Corps du tableau --> <?php if(sizeof($array_resultat)>0){ foreach($array_resultat as $site=>$s_array1){ //le premier niveau c'est le site, il a comme sous array un ou plusieur index foreach($s_array1 as $index=>$s_array2){ //ex $array_resultat['site1'][0]['up']['96']['123457896'] foreach($s_array2 as $etat=>$s_array3){ // Affichage echo '<tr align="center">'; echo '<td>'.date('m',$s_array3['timestamp']).'</td>'; echo '<td>'.date('d',$s_array3['timestamp']).'</td>'; echo '<td>'.date('H:i:s',$s_array3['timestamp']).'</td>'; echo '<td>'.$etat.'</td>'; echo '<td>'.$site.'</td>'; echo '<td>'.$s_array3['ID'].'</td>'; //afichage durée suivant les cas up sans down, down sans up et enfin si on a les deux on affiche la duree if($etat=='down'){ if(isset($array_resultat[$site][$index]['up'])){ $duree=$s_array2['down']['timestamp']-$s_array2['up']['timestamp']; $duree_jhms=transforme($duree); //appel fonction pour avoir un affichage de duree en j h min sec //echo '<td>'.$duree.' s </td>'; // au choix soit en secondes echo '<td>'.$duree_jhms.' </td>'; //au choix soit en j h min sec }else{ echo '<td>pas de up</td>'; } }elseif($etat=='up'){ if(isset($array_resultat[$site][$index]['down'])){ echo "<td> </td>"; //vide si up suivi d'un down }else{ echo "<td>pas de down</td>"; } } echo '</tr>'; } } } } ?> </tbody> </table> </body> </html>