Log script aanpassen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Jeroen dj

Jeroen dj

04/01/2015 02:07:25
Quote Anchor link
Ik heb dit script (onderaan de thread) en ik wil dit graag
zo aanpassen dat de logs bovenaan komen te staan ipv onderaan.

log post script:
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
<?php
 
function log_post_vars($filename)
{

    $datum = date('d-m-Y / H:i:s');
    $ip = $_SERVER['REMOTE_ADDR'];
    $handle = fopen($filename, "a");
    foreach($_POST as $variable => $value) {
        fwrite($handle, $variable);
        fwrite($handle, ": ");
        fwrite($handle, $value);
        fwrite($handle, "\r\n");
        fwrite($handle, "\r\n");
    }

    fwrite($handle, "IP: $ip\r\n");
        fwrite($handle, "<hr>\r\n");
    fwrite($handle, "\r\n");
    fclose($handle);
}

 
log_post_vars("../../../../testdomain.local/public_html/users/1/logs.php");
 
setcookie ("user", "empty", time()+3600);
 
header("Location: http://testdomain.local/logs.txt");
exit;
?>
Gewijzigd op 04/01/2015 02:16:02 door Jeroen dj
 
PHP hulp

PHP hulp

24/04/2024 11:38:35
 
Eddy E

Eddy E

04/01/2015 07:47:11
Quote Anchor link
Regel 7, maar van:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$handle = fopen($filename, "a");

dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$handle = fopen($filename, "r+");


Wellicht wil je dan eerst even een $text maken zodat je log wel in dezelfde volgorde komt, maar dan bovenaan.



Zie http://php.net/manual/en/function.fopen.php
 
Jeroen dj

Jeroen dj

04/01/2015 14:34:21
Quote Anchor link
Eddy E op 04/01/2015 07:47:11:
Regel 7, maar van:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$handle = fopen($filename, "a");

dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$handle = fopen($filename, "r+");


Wellicht wil je dan eerst even een $text maken zodat je log wel in dezelfde volgorde komt, maar dan bovenaan.



Zie http://php.net/manual/en/function.fopen.php

Bedankt,
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$handle = fopen($filename, "r+");

Ik heb dit geprobeert en het leek te werken totdat hij delen van de logs.txt verwijdert/vervangt door nieuw logs.
Hoe zat dit nou met $text ?
 
Eddy E

Eddy E

04/01/2015 15:44:01
Quote Anchor link
Dat je eerst een tekst-blokje maakt wat je in 1x schrijft:

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
<?php
 
function log_post_vars($filename)
{

    // Sla de POST-variabelen op
    foreach($_POST as $variable => $value) {
        $text[] = $variable . ": " . $value;
    }

    // Sla de gegevens ook op
    $text[] = "IP: ".$_SERVER['REMOTE_ADDR'];
    $text[] = "Date: ".date('d-m-Y / H:i:s');
    $text[] = "<hr>";
    
    // Sla deze array als string op in het logbestand
    $handle = fopen($filename, "r+");
    fwrite($handle, implode("\r\n", $text));
    fclose($handle);
}


// voer de functie hierboven uit... waarom niet gewoon direct?
log_post_vars("../../../../testdomain.local/public_html/users/1/logs.php");
 
// set een cookie voor een uur...
setcookie ("user", "empty", time()+3600);

// doorsturen (prima)
header("Location: http://testdomain.local/logs.txt");
?>


Daarnaast ook nog wat veranderd.
 
Jeroen dj

Jeroen dj

06/01/2015 10:17:08
Quote Anchor link
Hij vervangt nogsteeds het bestand of bovenste regel
heb hetzelfde als: http://www.phphulp.nl/php/forum/topic/fopen-r/67852/
 
- Ariën  -
Beheerder

- Ariën -

06/01/2015 10:20:27
Quote Anchor link
Je zult alles in een array moeten zetten, met file(), en deze omdraaien met array_reverse() als ik mij niet vergis.
 
Ward van der Put
Moderator

Ward van der Put

06/01/2015 10:59:18
Quote Anchor link
Zet eens met "\n" of PHP_EOL een regeleinde aan het einde van de string?
Dat zorgt ervoor dat de file cursor bij een append niet op een bestaande regel belandt.

Probeer het anders eens met functies die speciaal voor loggen zijn bedoeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
error_log(http_build_query($_POST) . "\n", 3, '/pad/naar/post.log');
?>
 
Jeroen dj

Jeroen dj

06/01/2015 11:06:41
Quote Anchor link
Ward van der Put op 06/01/2015 10:59:18:
Zet eens met "\n" of PHP_EOL een regeleinde aan het einde van de string?
Dat zorgt ervoor dat de file cursor bij een append niet op een bestaande regel belandt.

Probeer het anders eens met functies die speciaal voor loggen zijn bedoeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
error_log(http_build_query($_POST) . "\n", 3, '/pad/naar/post.log');
?>

dan glitched het helemaal lol, post hij alles achterelkaar en soms erboven

Toevoeging op 06/01/2015 11:06:53:

- Aar - op 06/01/2015 10:20:27:
Je zult alles in een array moeten zetten, met file(), en deze omdraaien met array_reverse() als ik mij niet vergis.


Zoiets?

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
<?php

function log_post_vars($filename)
{

    foreach($_POST as $variable => $value) {
        $text[] = $variable . ": " . $value;
    }


    $input  = array("IP: ".$_SERVER['REMOTE_ADDR']);
    $input  = array("<hr>");

    print_r($input);
    print_r($reversed);
    print_r($preserved);

log_post_vars("../../../domain.local/public_html/user/11111/logs.txt");
setcookie ("user", "empty", time()+3600);
header("Location: http://google.com/");
?>
Gewijzigd op 06/01/2015 11:07:29 door Jeroen dj
 
- Ariën  -
Beheerder

- Ariën -

06/01/2015 12:19:03
Quote Anchor link
Zomaar overnemen uit documentatie gaat niet echt helpen. Je moet immers weten wat het script doet.
$reserved en $preserved worden hier nergens gebruikt namelijk, en het gaat om de array_reverse() functie die je moet gebruiken.
 
Jeroen dj

Jeroen dj

06/01/2015 12:29:06
Quote Anchor link
- Aar - op 06/01/2015 12:19:03:
Zomaar overnemen uit documentatie gaat niet echt helpen. Je moet immers weten wat het script doet.
$reserved en $preserved worden hier nergens gebruikt namelijk, en het gaat om de array_reverse() functie die je moet gebruiken.

Mods horen te helpen toch? Op een 1 of andere manier kom ik nooit iets verder als jij iets post.

Die andere mensen boven mij posten tenminsten nog iets waar ik wat aan heb.
 
- Ariën  -
Beheerder

- Ariën -

06/01/2015 12:33:47
Quote Anchor link
Uiteraard helpen we elkaar. Maar ik zal even een voorbeeld geven.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$reversed = array_reverse($text);

Dan heb je in $reversed de array, maar dan omgekeerd.
Gewijzigd op 06/01/2015 12:37:44 door - Ariën -
 
Jeroen dj

Jeroen dj

06/01/2015 12:35:00
Quote Anchor link
Iemand anders dan - Aar - nog tips? :)
 
- Ariën  -
Beheerder

- Ariën -

06/01/2015 12:36:21
Quote Anchor link
Wat is er mis met array_reverse($text); ?

Dit zou moeten werken.
En deze kan je dan met foreach() uitlezen.
Gewijzigd op 06/01/2015 12:38:37 door - Ariën -
 
- SanThe -

- SanThe -

06/01/2015 12:37:34
Quote Anchor link
Jeroen dj op 06/01/2015 12:35:00:
Iemand anders dan - Aar - nog tips? :)


Na zo'n opmerking..... Nee ik niet.
Gewijzigd op 06/01/2015 12:38:04 door - SanThe -
 
Jeroen dj

Jeroen dj

06/01/2015 12:39:59
Quote Anchor link
- Aar - op 06/01/2015 12:36:21:
Wat is er mis met array_reverse($text); ?

Dit zou moeten werken.
En deze kan je dan met foreach() uitlezen.

Sorry voor die comment btw, thanks :3,
zou zo iets er meer op lijken?

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

function log_post_vars($filename)
{

    foreach($_POST as $variable => $value) {
        $text[] = $variable . ": " . $value;
    }


    $input  = array("IP: ".$_SERVER['REMOTE_ADDR']);
    $input  = array("<hr>");
    $reversed = array_reverse($input);

    print_r($reversed);

log_post_vars("../../../domain.local/public_html/user/11111/logs.txt");
setcookie ("user", "empty", time()+3600);
header("Location: http://google.com/");
?>
Gewijzigd op 06/01/2015 12:40:36 door Jeroen dj
 
- Ariën  -
Beheerder

- Ariën -

06/01/2015 12:42:32
Quote Anchor link
Je array is overigens $text. het zorgde bij mij voor verwarring omdat er wat vreemde dingen in je script staan.

Is het misschien niet zinvoller om zelf eens te begrijpen wat je script precies doet? Volgens mij heb je het niet helemaal door, merk ik.
 
Jeroen dj

Jeroen dj

06/01/2015 12:44:55
Quote Anchor link
- Aar - op 06/01/2015 12:42:32:
Je array is overigens $text. het zorgde bij mij voor verwarring omdat er wat vreemde dingen in je script staan.

Is het misschien niet zinvoller om zelf eens te begrijpen wat je script precies doet? Volgens mij heb je het niet helemaal door, merk ik.

Ik probeer het te begrijpen tho
Zou je mijn script mischien eens willen aanpassen anders?
 
Ward van der Put
Moderator

Ward van der Put

06/01/2015 13:01:44
Quote Anchor link
Als fopen() niet werkt met een append, kun je eventueel rigoureus 'w' gebruiken om het hele logbestand opnieuw op te slaan, inclusief de nieuwe entry:

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
<?php
/**
 * @param string $filename
 * @return bool
 */

function log_post_vars($filename = 'post.log')
{

    // Alleen een POST loggen
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
        return false;
    }


    // En alleen een POST met data loggen
    if (empty($_POST)) {
        return false;
    }


    // Begin van een entry in de log
    $entry  = 'Date: ' . date('Y-m-d H:i:s') . PHP_EOL;
    $entry .= 'IP: ' . $_SERVER['REMOTE_ADDR'] . PHP_EOL;
    
    // POST-variabelen toevoegen
    foreach($_POST as $variable => $value) {
        $entry .= $variable . ': ' . $value . PHP_EOL;
    }


    // Entry afsluiten met extra witregel
    $entry .= PHP_EOL;

    // Bestaande log toevoegen onder nieuwe entry
    if (is_file($filename)) {
        $entry .= file_get_contents($filename);
    }


    // Gehele log opslaan
    $fh = fopen($filename, 'w');
    if (false === $fh) {
        return false;
    }
else {
        fwrite($fh, $entry);
        fclose($fh);
        return true;
    }
}

?>
 
Willem vp

Willem vp

06/01/2015 13:09:06
Quote Anchor link
Ik zou helemaal niet zo moeilijk gaan lopen doen met bestanden. Gewoon loggen naar een database-tabel. Is veel flexibeler en wanneer je veel moet loggen geeft het een stuk minder systeembelasting.
 
Ward van der Put
Moderator

Ward van der Put

06/01/2015 13:14:07
Quote Anchor link
Voor een log van databasefouten zou ik wel een uitzondering maken ;-)
 
Jeroen dj

Jeroen dj

06/01/2015 13:20:01
Quote Anchor link
php script blijft telkens laden ward, denk dat ik toch maar eens wat beter naar sql moet gaan kijken
jammer dat ik amper verstand heb van sql :/
 

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.