PHP log files netjes uitlezen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Mark Markson

Mark Markson

23/05/2012 12:03:34
Quote Anchor link
Ik wil log-files kunnen uitlezen met PHP en het netjes kunnen weergeven. Tot nu toe is dit mijn code:


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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));

?>



Moet ik ergens op exploden? Ik heb het geprobeerd op de ";", maar dan komt niet alles netjes...
 
PHP hulp

PHP hulp

20/10/2021 02:40:46
 
- SanThe -

- SanThe -

23/05/2012 12:05:46
Quote Anchor link
Hoe is de opzet van het bestand? Gewoon elke info op een nieuwe regel?
 
Mark Markson

Mark Markson

23/05/2012 12:06:36
Quote Anchor link
Nou, dit is een gedeelt van het bestand:

#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
 
- SanThe -

- SanThe -

23/05/2012 12:10:53
Quote Anchor link
En wat wil je er van hebben?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$data
= file('bestand.log');
foreach($data as $line)
{

    echo $line . '<br/>';
}

?>
 
Mark Markson

Mark Markson

23/05/2012 12:11:50
Quote Anchor link
Ik moet alles netjes kunnen weergeven, ik heb dus alles nodig...
 
- SanThe -

- SanThe -

23/05/2012 12:12:53
Quote Anchor link
Dan zie mijn scriptje.
 
Mark Markson

Mark Markson

23/05/2012 12:17:15
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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));



?>





Het ziet er nog steeds lelijk uit...
Gewijzigd op 23/05/2012 12:19:54 door Mark Markson
 
Chris PHP

Chris PHP

23/05/2012 12:20:24
Quote Anchor link
Dan style he ze door het tussen <p></p> te zetten, etc.

Zoiets dus.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$data
= file('bestand.log');
foreach($data as $line)
{

    echo '<p>' . $line . '</p>';
}

?>
Gewijzigd op 23/05/2012 12:21:43 door Chris PHP
 
- SanThe -

- SanThe -

23/05/2012 12:21:16
Quote Anchor link
- SanThe - op 23/05/2012 12:10:53:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$data
= file('bestand.log');
foreach($data as $line)
{

    echo $line . '<br/>';
}

?>


Alléén dit gebruiken. Wel even $data = file('bestand.log'); veranderen in $data = file('test.log'); in jouw geval.
 
Mark Markson

Mark Markson

23/05/2012 12:22:14
Quote Anchor link
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...
 
Chris PHP

Chris PHP

23/05/2012 12:24:03
Quote Anchor link
En is dit niks?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$data
= file('bestand.log');
echo '<ul>';
foreach($data as $line)
{

    echo '<li>' . $line . '</li>';
}

echo '</ul>';
?>
 
Mark Markson

Mark Markson

23/05/2012 12:25:16
Quote Anchor link
Het blijft er hetzelfde uitzien...

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...
 
Chris PHP

Chris PHP

23/05/2012 12:26:39
Quote Anchor link
Het eerste resultaat is logisch he als je het erp line/regel opslaat in een tekst document.

Het onderste is als je meerdere entries om 1 line/regel zet.
Gewijzigd op 23/05/2012 12:27:19 door Chris PHP
 
Mark Markson

Mark Markson

23/05/2012 12:38:03
Quote Anchor link
Oké, ik moet informatie uit het bestand kunnen halen. Welke browsers er gebruikt worden etc...
 
Chris PHP

Chris PHP

23/05/2012 14:11:49
Quote Anchor link
Ja dat doe je toch.

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.
 
Eddy E

Eddy E

23/05/2012 15:40:54
Quote Anchor link
Je kan exploden op de #, dan krijg je ook de kolommen (ipv alleen rijen).
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().
 
Mark Markson

Mark Markson

24/05/2012 10:09:17
Quote Anchor link
Oké, ik leg het een beetje beter uit. Ik moet logbestanden kunnen uitlezen (dat is gelukt met fopen en fread), maar ik moet er informatie uit moeten kunnen halen en het kunnen gebruiken.

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?
 
Gerhard l

gerhard l

24/05/2012 11:15:12
Quote Anchor link
Lees de reactie van Eddy?

explode
array
foreach
Gewijzigd op 24/05/2012 11:15:23 door gerhard l
 
Mark Markson

Mark Markson

01/06/2012 14:19:48
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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";
}

?>






Dit heb ik tot nu toe...
Gewijzigd op 01/06/2012 14:29:23 door Mark Markson
 
Chris PHP

Chris PHP

01/06/2012 14:20:58
Quote Anchor link
En dan bump je deze ook nog eens omhoog.
 
Mark Markson

Mark Markson

15/06/2012 16:26:09
Quote Anchor link
Oké, een edit. Ik ben wat verder gekomen en kan nu onderdelen uitlezen, alleen krijg ik het record van de eerste array. Hoe krijg ik het record van meerdere arrays?


Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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



?>



Het gaat om deze regel:

$browser = $data[0]['cs(User-Agent)']; //Browser selecteren
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.