Mitenkä voisisin tehdä sivuilleni laskurin, joka näyttäisi TOP-10 kävijät (ip:n osalta)? Olen nobo, joten en osaa itse ohjelmoida tuollaista, mutta en kuitenkaan usko, että tuollainen vaatisi ihan älyttömästi koodia :P
Minulla on kotisivuillani siis laskuri.txt, jossa on sivuilla käyneiden IP:t rivissä.
<?php //Luetaan tiedostosta rivit taulukkoon $array $array = file('laskuri.txt'); //Laitetaan rivit uuteen arrayhyn niin että key on IP ja arvo lukumäärä foreach ($array as $ip) { if (isset($newarray[$ip])) $newarray[$ip] = $newarray[$ip] + 1; else $newarray[$ip] = 1; } //Järjestetään niin halutessa asort($newarray); reset($newarray); //Tulostusesimerkki echo "<ol>"; foreach ($newarray as $ip => $count) { echo "<li>{$ip}: $count </li>\n"; $c++; if ($c == 10) break; } echo "</ol>"; ?>
Tällä koodinpätkällähän alkaa olla jo FAQ:iin aineksia, jo kolmatta kertaa vastaan sillä tähän samaan kysymykseen.
Sanoo:
Parse error: parse error, unexpected T_FOREACH in /var/www/html/jussi/topten.php on line 28
Rivillä 28 on foreach ($array as $ip) { ja siihen kuuluva litania oli tämä:
Virhe on tuota edeltävällä koodirivillä. Sen voit päätellä jo errorista: "Odottamaton foreach rivillä 28". Yleensä puuttuu puolipiste.
Niinpä olikin :P
Oli kommentista lähtenyt osa tekstistä seuraavalle riville ja ilman kommenttimerkkejä, joten se valitteli sitten vikaa koodissa...
Kiitoksia! Nyt minä saan pidettyä top-listaa sivuillani käyvistä IP-osoitteista, selaimista ja käyttiksistä... paitsi, että miten muuten näkee, että mitä selainta tai käyttistä käyttäjä käyttää? :D
ONGELMA!!!
Miksi top-10 pärjäävä IP laskeekin alemmas? Minulla on sivuillani käynyt kolme henkilö scriptin käyttöönoton jälkeen, joista toinen on käynyt kaksi kertaa (omaa iipeetäni ei lasketa) niin se, joka on käynyt kaksi kertaa on nyt kakkosena eikä ykkösenä niinkuin pitäisi??
Ja nyt se on jo kolmas!!! Vaikka sen piti olla ykkönen??
juhaz kirjoitti:
miten muuten näkee, että mitä selainta tai käyttistä käyttäjä käyttää?
Luotettavasti et mitenkään, mutta parsimalla $_SERVER['HTTP_USER_AGENT'] -muuttujaa saat jonkinlaisia tilastoja aikaan.
juhaz kirjoitti:
Miksi top-10 pärjäävä IP laskeekin alemmas?
Koska järjestät arrayn väärinpäin (pienin luku ensimmäiseksi, suurin viimeiseksi). Käytä asortin sijasta arsortia.
Kiitoskia. Nyt toimii, kuten pitääkin. Mitäs muita noita on kuin tuo $_SERVER['HTTP_USER_AGENT'] ja $_SERVER['REMOTE_ADDR'] ? Vai onko niitä enään enempää?
Miten minä voin tehdä tähän koodiin jotain, että se lisää yhden $maara:n aina, kun jostain IP:stä tulee tyyppi, mutta vain kerran vuorokauden aikana?
<?php $ip = $_SERVER['REMOTE_ADDR']; $file = "tiedosto.txt"; $data = file($file); $ip = $_SERVER['REMOTE_ADDR']; $omaip = "10.1.1.6"; //IP-Osoitteesi echo('<br><br>'); if($omaip == $ip){ $maara = $data[0]; echo('<center>'); echo "juhaz has eated $maara people"; echo('<br>'); echo("juhaz has eated you already!"); echo('</center>'); } if($omaip != $ip){ $maara = $data[0] + 1; $data[0] = $maara; $fo = fopen($file,"w"); foreach ($data as $row); { fputs($fo, $row); } fclose($fo); echo "juhaz has eated $maara people"; }
Pistä sekaan päivämäärä millon ko. ip:stä on tultu.
rivi vois olla tälläne: 127.0.0.1|10käyntiä|viim2005-07-24
Jos käytössäsi on mysql, tee ihmeessä sillä. Isot tiedostot tulee hidastamaan paljon lataamista.
juhaz kirjoitti:
Mitäs muita noita on kuin tuo $_SERVER['HTTP_USER_AGENT'] ja $_SERVER['REMOTE_ADDR'] ? Vai onko niitä enään enempää?
Vaikka kuinka paljon. Katso vaikka phpinfosta.
Ok. Enpä löytänyt tuosta sitä mitä etsin, mutta olisiko jotain keinoa hakea sitä tietoa, että miltä sivulta joku käyttäjä on minun sivuilleni tullut?
$_SERVER['HTTP_REFERER']
Aina noita tietoja ei kuitenkaan löydy, jos käyttäjällä on vaikkapa riittävän ilkeämielinen palomuuri. Eli muista tehdä vaihtoehto (isset auttaa)
Aihe on jo aika vanha, joten et voi enää vastata siihen.