PHP log files netjes uitlezen
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$bestand = "test.log"; //Welk bestand moet hij openen?
$bestand_open = fopen($bestand,"r");//Het bestand wordt geopend
$bestand_uitlezen = fread($bestand_open, filesize($bestand));//Het bestand wordt uitgelezen
//print_r($bestand_uitlezen);//Alle gegevens worden weergegeven
$array = print_r (explode(" ",$bestand_uitlezen));
?>
$bestand = "test.log"; //Welk bestand moet hij openen?
$bestand_open = fopen($bestand,"r");//Het bestand wordt geopend
$bestand_uitlezen = fread($bestand_open, filesize($bestand));//Het bestand wordt uitgelezen
//print_r($bestand_uitlezen);//Alle gegevens worden weergegeven
$array = print_r (explode(" ",$bestand_uitlezen));
?>
Moet ik ergens op exploden? Ik heb het geprobeerd op de ";", maar dan komt niet alles netjes...
Hoe is de opzet van het bestand? Gewoon elke info op een nieuwe regel?
#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2012-03-30 10:03:14
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
2012-03-30 10:03:14 145.118.4.14 GET /robots.txt - 80 - 77.88.28.246 Mozilla/5.0+(compatible;+YandexBot/3.0;++http://yandex.com/bots) 404 0 2 296
#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2012-03-30 10:25:29
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
2012-03-30 10:25:29 145.118.4.14 GET /kem32_info/ - 80 - 145.118.0.102 Mozilla/4.0+(compatible;+MSIE+8.0;+Windows+NT+5.2;+Trident/4.0;+GTB7.3;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.04506.30;+.NET+CLR+3.0.04506.648;+.NET+CLR+3.0.4506.2152;+.NET+CLR+3.5.30729;+.NET4.0C;+.NET4.0E;+InfoPath.2) 200 0 0 515
2012-03-30 10:25:32 145.118.4.14 GET /kem32_info/pres1.htm - 80 - 145.118.0.102 Mozilla/4.0+(compatible;+MSIE+8.0;+Windows+NT+5.2;+Trident/4.0;+GTB7.3;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.04506.30;+.NET+CLR+3.0.04506.648;+.NET+CLR+3.0.4506.2152;+.NET+CLR+3.5.30729;+.NET4.0C;+.NET4.0E;+InfoPath.2) 200 0 0 15
2012-03-30 10:25:32 145.118.4.14 GET /kem32_info/pres1_files/frame.htm - 80 - 145.118.0.102 Mozilla/4.0+(compatible;+MSIE+8.0;+Windows+NT+5.2;+Trident/4.0;+GTB7.3;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.04506.30;+.NET+CLR+3.0.04506.648;+.NET+CLR+3.0.4506.2152;+.NET+CLR+3.5.30729;+.NET4.0C;+.NET4.0E;+InfoPath.2) 200 0 0 15
2012-03-30 10:25:32 145.118.4.14 GET /kem32_info/pres1_files/script.js - 80 - 145.118.0.102 Mozilla/4.0+(compatible;+MSIE+8.0;+Windows+NT+5.2;+Trident/4.0;+GTB7.3;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.04506.30;+.NET+CLR+3.0.04506.648;+.NET+CLR+3.0.4506.2152;+.NET+CLR+3.5.30729;+.NET4.0C;+.NET4.0E;+InfoPath.2) 200 0 0 78
2012-03-30 10:25:32 145.118.4.14 GET /kem32_info/pres1_files/outline.htm - 80 - 145.118.0.102 Mozilla/4.0+(compatible;+MSIE+8.0;+Windows+NT+5.2;+Trident/4.0;+GTB7.3;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.04506.30;+.NET+CLR+3.0.04506.648;+.NET+CLR+3.0.4506.2152;+.NET+CLR+3.5.30729;+.NET4.0C;+.NET4.0E;+InfoPath.2) 200 0 0 31
2012-03-30 10:25:32 145.118.4.14 GET /kem32_info/pres1_files/slide0001.htm - 80 - 145.118.0.102 Mozilla/4.0+(compatible;+MSIE+8.0;+Windows+NT+5.2;+Trident/4.0;+GTB7.3;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.04506.30;+.NET+CLR+3.0.04506.648;+.NET+CLR+3.0.4506.2152;+.NET+CLR+3.5.30729;+.NET4.0C;+.NET4.0E;+InfoPath.2) 200 0 0 31
2012-03-30 10:25:32 145.118.4.14 GET /kem32_info/pres1_files/outline.htm - 80 - 145.118.0.102 Mozilla/4.0+(compatible;+MSIE+8.0;+Windows+NT+5.2;+Trident/4.0;+GTB7.3;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.04506.30;+.NET+CLR+3.0.04506.648;+.NET+CLR+3.0.4506.2152;+.NET+CLR+3.5.30729;+.NET4.0C;+.NET4.0E;+InfoPath.2) 200 0 0 0
Ik moet alles netjes kunnen weergeven, ik heb dus alles nodig...
Dan zie mijn scriptje.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$bestand = ("test.log"); //Welk bestand moet hij openen?
$bestand_open = fopen($bestand,"r");//Het bestand wordt geopend
$bestand_uitlezen = fread($bestand_open, filesize($bestand));//Het bestand wordt uitgelezen
print_r($bestand_uitlezen);//Alle gegevens worden weergegeven
/*foreach($bestand as $line)
{
echo $line . '<br/>';
}*/
//$array = print_r (explode(" ",$bestand_uitlezen));
?>
$bestand = ("test.log"); //Welk bestand moet hij openen?
$bestand_open = fopen($bestand,"r");//Het bestand wordt geopend
$bestand_uitlezen = fread($bestand_open, filesize($bestand));//Het bestand wordt uitgelezen
print_r($bestand_uitlezen);//Alle gegevens worden weergegeven
/*foreach($bestand as $line)
{
echo $line . '<br/>';
}*/
//$array = print_r (explode(" ",$bestand_uitlezen));
?>
Het ziet er nog steeds lelijk uit...
Gewijzigd op 23/05/2012 12:19:54 door Mark Markson
- SanThe - op 23/05/2012 12:10:53:
Alléén dit gebruiken. Wel even $data = file('bestand.log'); veranderen in $data = file('test.log'); in jouw geval.
Die logfile bevat een rits aan gegevens. Ik wil al die gegevens netjes onder elkaar hebben, in een rij. Ik heb het geprobeerd met een explode, maar dat geeft geen resultaat. Ik moet niet stylen...
Je hebt dit:
#Version: 1.0
#Date: 2012-03-30 10:03:14
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
2012-03-30 10:03:14 145.118.4.14 GET /robots.txt - 80 - 77.88.28.246 Mozilla/5.0+(compatible;+YandexBot/3.0;++http://yandex.com/bots) 404 0 2 296
#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2012-03-30 10:25:29
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
Dat moet dus eigenlijk zoiets zijn:
#Version: 1.0 #Date: 2012-03-30 10:03:14 #Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken #Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2012-03-30 10:25:29
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
Naast elkaar in de breedte...
Het onderste is als je meerdere entries om 1 line/regel zet.
Gewijzigd op 23/05/2012 12:27:19 door Chris PHP
Oké, ik moet informatie uit het bestand kunnen halen. Welke browsers er gebruikt worden etc...
Maar als je elk entry op een nieuwe regel zet dan is het toch logisch dat hij het ook per regel ophaald?
Dus dan zul je de informatie niet op elke regel opslaan, maar een aantal entries per regel als je het onderste resultaat wilt hebben.
En als je er simpelweg de <br> tussenuit haald wordt het een grote lap tekst.
Dit zet je uiteraard in een tabel (want het is dat).
Eventueel kan je daarna alles exploden op een : (maximaal 1x) en de eerste (ik dacht first() ...) weghalen omdat dat de kop is.
Speel er eens mee, maar wel regel voor regel. Dus exploden in de foreach().
In de file staan allerlei dingen, zoals welke browser er gebruikt is, hoelang het duurde enzo.
Mijn vraag is:
Hoe haal je die info eruit?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$bestand = ("test.log"); //Welk bestand moet hij openen?
$bestand_open = fopen($bestand,"r");//Het bestand wordt geopend
$bestand_uitlezen = fread($bestand_open, filesize($bestand));//Het bestand wordt uitgelezen
$array1 = array(explode(";", $bestand_uitlezen)); //Exploden op puntkomma's en spaties breekt het op in stukjes
$array2 = array(explode(" ", $bestand_uitlezen));
$get_count = 0;
//echo "<pre>".print_r($array1,1);
echo "<pre>".print_r($array2,1);
foreach ($array2 as $gegevens)
{
echo $gegevens . "<br />";
}
if (in_array('GET', $array2, true)) {
echo "JA";
}
?>
$bestand = ("test.log"); //Welk bestand moet hij openen?
$bestand_open = fopen($bestand,"r");//Het bestand wordt geopend
$bestand_uitlezen = fread($bestand_open, filesize($bestand));//Het bestand wordt uitgelezen
$array1 = array(explode(";", $bestand_uitlezen)); //Exploden op puntkomma's en spaties breekt het op in stukjes
$array2 = array(explode(" ", $bestand_uitlezen));
$get_count = 0;
//echo "<pre>".print_r($array1,1);
echo "<pre>".print_r($array2,1);
foreach ($array2 as $gegevens)
{
echo $gegevens . "<br />";
}
if (in_array('GET', $array2, true)) {
echo "JA";
}
?>
Dit heb ik tot nu toe...
Gewijzigd op 01/06/2012 14:29:23 door Mark Markson
En dan bump je deze ook nog eens omhoog.
Code (php)
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
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
<?php
$bestand = ("test.log"); //Welk bestand moet hij openen?
$bestand_open = fopen($bestand,"r");//Het bestand wordt geopend
$bestand_uitlezen = fread($bestand_open, filesize($bestand));//Het bestand wordt uitgelezen
$array1 = array(explode(" ",$bestand_uitlezen)); //Exploden op puntkomma's en spaties breekt het op in stukjes
//$array3 = explode("+", $bestand_uitlezen);
# Enjoooooooooy
function readlog($filename)
{
$rawdata = array();
$handle = fopen($filename, "r");
if($handle)
{
$lineNum = 0;
while(!feof($handle))
{
$lineNum = $lineNum + 1;
$data = fgets($handle);
if(substr($data, 0, 8) == '#Fields:')
{
$fields = explode(' ', trim(str_replace('#Fields:', '', $data)));
}
if(substr($data, 0, 1) != '#')
{
$parts = explode(' ', trim($data));
if(!empty($parts[0]))
{
$values["filename"] = $filename;
$values["lineNum"] = $lineNum;
for($i = 0; $i < count($fields); $i++)
{
// replace the value with null if it's a dash
$values[$fields[$i]] = ($parts[$i] == '-') ? null : $parts[$i];
}
$rawdata[] = $values;
}
}
}
fclose($handle);
}
return $rawdata;
}
$data = readlog('test.log');
echo "<pre>";
print_r($data);
echo '</pre>';
$browser = $data[0]['cs(User-Agent)']; //Browser selecteren
$timetaken = $data[0]['time-taken']; //Verstreken tijd voor een aanvraag
?>
$bestand = ("test.log"); //Welk bestand moet hij openen?
$bestand_open = fopen($bestand,"r");//Het bestand wordt geopend
$bestand_uitlezen = fread($bestand_open, filesize($bestand));//Het bestand wordt uitgelezen
$array1 = array(explode(" ",$bestand_uitlezen)); //Exploden op puntkomma's en spaties breekt het op in stukjes
//$array3 = explode("+", $bestand_uitlezen);
# Enjoooooooooy
function readlog($filename)
{
$rawdata = array();
$handle = fopen($filename, "r");
if($handle)
{
$lineNum = 0;
while(!feof($handle))
{
$lineNum = $lineNum + 1;
$data = fgets($handle);
if(substr($data, 0, 8) == '#Fields:')
{
$fields = explode(' ', trim(str_replace('#Fields:', '', $data)));
}
if(substr($data, 0, 1) != '#')
{
$parts = explode(' ', trim($data));
if(!empty($parts[0]))
{
$values["filename"] = $filename;
$values["lineNum"] = $lineNum;
for($i = 0; $i < count($fields); $i++)
{
// replace the value with null if it's a dash
$values[$fields[$i]] = ($parts[$i] == '-') ? null : $parts[$i];
}
$rawdata[] = $values;
}
}
}
fclose($handle);
}
return $rawdata;
}
$data = readlog('test.log');
echo "<pre>";
print_r($data);
echo '</pre>';
$browser = $data[0]['cs(User-Agent)']; //Browser selecteren
$timetaken = $data[0]['time-taken']; //Verstreken tijd voor een aanvraag
?>
Het gaat om deze regel:
$browser = $data[0]['cs(User-Agent)']; //Browser selecteren