Gå til innhold

Loggføring av besøk til en tekstfil


Anbefalte innlegg

Hei,

 

Jeg tar webprogrammering med PHP nå og sliter litt med en øving.

 

Øvingen er som følger:

 

Lag et PHP-script som logger IP-adressen til dine besøkende og lagrer dette på en tekstfil. Lag statistikk som viser antall treff av hver IP-adressen.

 

IKKE bruk funksjonen file()

 

Hint: Kombiner behandling av filer og matriser og utforsk hvilke matrisefunksjoner som er tilgjengelige i PHP, så reduseres kompleksiteten av oppgaven betydelig

 

Jeg klarer fint å lage et script som logger IPene til en tekstfil, det jeg sliter med er å søke igjennom filen etter eksisterende IPer og hvis den finnes fra før, hvordan legger man til antallet ved siden av IPen?

 

Jeg vil gjerne lære noe av dette så kom helst ikke med en direkte fasit, men gjerne tips og pekepinner som kan hjelpe meg i riktig retning. Kom gjerne med tips til syntax som kan brukes og små eksempler.

 

Takk!

Hilsen en PHP noob :blush:

Lenke til kommentar
Videoannonse
Annonse

For å lagre flere ting i en tekstfil må den naturligvis være strukturert. Du trenger tegn for å skille data. Ofte brukes linjeskift og tab, men da har det en tendens til å bli rot med crossplatform-bruk o.l. Ved å strukturerer filen systematisk kan en enkelt separere og hente ut data.

 

$file = '127.0.0.1|105||10.0.0.1|65';
$file = explode ( '||', $file );

foreach ( $file as $visitor ) {
$visitor = explode ( '|', $visitor );
$visitors[$visitor[0]] = $visitor[1];
}

print_r ( $visitors );

Da har du et array som ser følgende ut, og det gjør søking og økning i antall lettere.

 

Array
(
[127.0.0.1] => 105
[10.0.0.1] => 65
)

Lenke til kommentar

Ok, leser du da ut hele tekstfilen hver gang, for så å skrive all infoen tilbake til tekstfilen?

 

Gjøres det ikke veldig mye unødvendig da? Hvis en side er besøkt av 1 mill forskjellige IPer blir jo tekstfila ufattelig stor og PHP gjør mye unødvendig?

Lenke til kommentar

Det er helt korrekt, å lese hele filen er i de fleste tilfeller veldig unødvendig. I større databaser indekserer man vanligvis, slik at man ikke trenger å hente ut alt, men ettersom du ikke lagrer så mye data vil indeksen bli like stor som selve databasen, og dermed ubrukelig. Det beste ville nok uansett være å benytte seg av en allerede eksisterende database, f.eks. MySQL.

 

Edit: Ikke MySQL i denne oppgaven, nei ..

Endret av Jonas
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...