[PHP] download counter

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heyz mensen,

ik heb een download counter geschreven en hierdoor zou er in een simpel tekstbestand elke keer op een nieuwe regel een IP moeten worden opgeslagen, en als er met dat IP al gedownload is zou er dan een '2' of een '3' (afhankelijk van hoe vaak er gedownload is met dat IP) voor moeten komen te staan..

Het probleem is alleen dat de 1e regel telkens wordt overschreven met het laatste IP dat gedownload heeft... Maar hoe vaak het is gedownload wordt wel telkens 1 meer...

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

$expire= 1; 

$logfile= "logbestand.log"; 
    
$ip= getenv('REMOTE_ADDR');
$visits=0;
$badhit= false;
$now= time();

$ips = array(array());
if (file_exists($logfile)){
    if ($loggedips=file($logfile)){
        $visits=trim($loggedips[0]);
        for ($i=1; $i< count($loggedips); $i++){
            $loggedips[$i]=trim($loggedips[$i]);
            $ips[$i] = explode('||', $loggedips[$i]);
            if (($ips[$i][0]==$ip) && ($now-$ips[$i][1]< $expire)) 
                $badhit= true;
        }
        if ($badhit)
            echo $visits;
        else{
            $visits++;
            $fp= fopen($logfile, 'w');
            fputs($fp,"$visits\n");
            for ($i=1; $i< count($loggedips); $i++){
                if ($now-$ips[$i][1] < $expire)
                    fputs($fp, $ips[$i][0]."||".$ips[$i][1]."\n");
            }
            fputs($fp, "$ip||$now\n");
            fclose($fp);
            echo $visits;           
        }
    }
}else
    echo "Logfile bestaat niet...";



?>

Acties:
  • 0 Henk 'm!

  • Jelle Niemantsverdriet
  • Registratie: Februari 2000
  • Laatst online: 08:50
En je vraag is?

De if in regel 14 klopt in ieder geval niet Sorry, las niet goed 8)7

[ Voor 21% gewijzigd door Jelle Niemantsverdriet op 19-09-2003 16:55 ]


Acties:
  • 0 Henk 'm!

  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 08:38
Jelle Niemantsverdriet schreef op 19 September 2003 @ 16:46:
En je vraag is?

De if in regel 14 klopt in ieder geval niet
Waarom zou het if-statement in regel 14 niet kloppen volgens jou? Kijk eens goed wat hij ermee wil bereiken.

edit:
@djluc: niet snel dingen wegediten he ;)

[ Voor 10% gewijzigd door Limhes op 19-09-2003 16:49 ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:51
Zijn vraag is waarom steeds de regel wordt overschreven ipv een nieuwe regel die wordt toegevoegd. In Perl kon je zoiets doen met >> in je handler o.i.d. Met PHP zou ik het echter niet weten.

Probeer eens een print_r van de array te maken zodat je zeker weet dat die klopt.

[ Voor 37% gewijzigd door djluc op 19-09-2003 16:49 ]


Acties:
  • 0 Henk 'm!

  • Suepahfly
  • Registratie: Juni 2001
  • Laatst online: 17-09 17:05
Limhes schreef op 19 September 2003 @ 16:48:
[...]


Waarom zou het if-statement in regel 14 niet kloppen volgens jou? Kijk eens goed wat hij ermee wil bereiken.
Er staat maar één ``='' dat moet ern twee zijn in een vergelijking

Acties:
  • 0 Henk 'm!

  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 08:38
Suepahfly schreef op 19 september 2003 @ 16:50:
Er staat maar één ``='' dat moet ern twee zijn in een vergelijking
Kijk dan eens goed of iets een vergelijking is of niet.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:51
Dit is een filehandler, daar hoeft dat niet volgens mij.
edit:
Damn weer te laat.

[ Voor 26% gewijzigd door djluc op 19-09-2003 17:00 ]


Acties:
  • 0 Henk 'm!

  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 08:38
djluc schreef op 19 September 2003 @ 16:51:
Dit is een filehandler, daar hoeft dat niet volgens mij.
En nee, file() geeft een array terug...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mijn vraag is idd wat djluc zegt... waarom komt er niet mooi netjes een nieuwe regel...

Acties:
  • 0 Henk 'm!

  • Suepahfly
  • Registratie: Juni 2001
  • Laatst online: 17-09 17:05
De fout zit em op regel 26.

Daar staat ``fp= fopen($logfile, 'w'); ''
Dit moet zijn fp= fopen($logfile, 'a');

PHP: fopen - Manual

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:51
Limhes schreef op 19 September 2003 @ 16:52:
[...]
En nee, file() geeft een array terug...
Ja, maar daar agat het niet om. PHP is gebaseerd op als het niet onwaar is is het waar. File geeft de waarde false terug als er iets niet goed ging, dat is dus de controle die er wordt uitgevoerd. Het is dus de bedoeling om de array die je terug krijgt in de var te plaatsen. Maar alleen als file goed gaat.
Suepahfly schreef op 19 September 2003 @ 16:54:
De fout zit em op regel 26.
Daar staat ``fp= fopen($logfile, 'w'); ''
Dit moet zijn fp= fopen($logfile, 'a');
PHP: fopen - Manual
Dat was idd wat ik bedoelde met:
In Perl kon je zoiets doen met >> in je handler o.i.d. Met PHP zou ik het echter niet weten.

[ Voor 33% gewijzigd door djluc op 19-09-2003 16:57 ]


Acties:
  • 0 Henk 'm!

  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 08:38
djluc schreef op 19 September 2003 @ 16:55:
[...]

Ja, maar daar agat het niet om. PHP is gebaseerd op als het niet onwaar is is het waar. File geeft de waarde false terug als er iets niet goed ging, dat is dus de controle die er wordt uitgevoerd. Het is dus de bedoeling om de array die je terug krijgt in de var te plaatsen. Maar alleen als file goed gaat.
offtopic:
Dat snap ik :)

Feit was alleen dat jouw uitleg niet correct was, en daar was mijn commentaar op gebaseerd :+

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:51
offtopic:
Er was helemaal geen uitleg, misschien dat je dat bedoeld ? ;)

Er zijn trouwens wat betere manieren om het juiste ip-adres te achterhalen. Ook kun je eens kijken naar de mogelijkheden van sessions, zodat je de gebruikers misschien wat beter kunt onderscheiden. Na enkele jaren zal je file namelijk erg veel ip's bevatten die hergebruikt worden.

Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
getenv is trouwens redelijk vies, kun je beter de juiste var uit $_SERVER pakken of gewoon direct $REMOTE_ADDR :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ok.. bedankt het werkt nu..! het is gewoon om te kijken hoeveel mensen het downen en dan schrijf ik wel een apart progje om de log een beetje schoon en overzichtelijk te maken... :P
Pagina: 1