Jep... Eli MySQL kävijälaskuri.
Tämä scripti tallentaa MySQL: ään tietoa kävijöistä, ja näyttää montako kävijää sivulla on ollut. Scripti ei tallenna kävijän tietoja, jos MySQL kannasta löytyy jo vastaava IP osoite, kuin kävijän IP.
Vaatii MySQL: än.
Asennusohjeet:
1. Tee tietokanta MySQL palvelimelle, jos sitä ei valmiiksi jo ole olemassa.
2. Lisää ensimmäisestä listauksesta koodi MySQL: ään.
3. Tallenna listaus 2. Tiedostonimenä functions.php
4. Tallenna listaus 3. Tiedostonimenä visitors.php
5. Vaihda functions.php tiedoston $host, $pass, $db ja $user muuttujien arvoja.
6. Lisää sivuillesi koodi listauksesta 4
Taulun luonti:
CREATE TABLE userinfo(id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), ip VARCHAR(255), host VARCHAR(255), time INT, referer VARCHAR(255), agent VARCHAR(255) ); CREATE TABLE visits(id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), visits INT );
functions.php:
<?php $link; $host = "xxx"; # Osoite MySQL serveriin $user = "xxx"; # Käyttäjänimi MySQL: ään $pass = "xxx"; # Salasana MySQL: ään $db = "xxx"; # Mikä tietokanta valitaan? function db() { global $link, $host, $user, $pass, $db; $link = mysql_connect($host, $user, $pass) or die ("Ei voitu yhdistää MySQL tietokantaan: ".mysql_error()); mysql_select_db($db, $link) or die ("Ei voitu valita tietokantaa <i>$db</i>"); } function dbclose() { global $link; mysql_close($link); } function saveStats() { global $link, $HTTP_USER_AGENT, $REMOTE_HOST, $REMOTE_ADDR, $HTTP_REFERER; $update; db(); $r = mysql_query("SELECT * FROM userinfo", $link); while( $ro = mysql_fetch_array($r, $link) ) { if( $ro['ip'] ==@$REMOTE_ADDR ) { $update = 1; } } if( $update !="1" ) { $res = mysql_query("SELECT visits FROM visits", $link); $row = mysql_fetch_array($res, $link); $visitit = $row[visits]+1; $que = "UPDATE visits SET visits=$visitit"; $resul = mysql_query($que, $link); $time = mktime(); $host = @gethostbyaddr($REMOTE_ADDR); $ip = @$REMOTE_ADDR; $agent = @$HTTP_USER_AGENT; $referer = @$HTTP_REFERER; $query = "INSERT INTO userinfo(ip, host, agent, referer, time) VALUES('$ip', '$host', '$agent', '$referer', '$time')"; $resultti = mysql_query($query, $link); } dbclose(); } ?>
visitors.php, kävijän tietojen näyttäjä
<?php include ("functions.php"); db(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Kävijät</title> </head> <body> <?php if( empty($id) ) { $resultti = mysql_query("SELECT * FROM visits", $link) or die("Virhe: ".mysql_error()); $rowwi = mysql_fetch_array($resultti, $link); print "<p>Sivuilla on ollut $rowwi[visits] kävijää</p>\n"; $r = mysql_query("SELECT ip, id FROM userinfo", $link); while( $row = mysql_fetch_array($r) ) { print "<p><a href=\"visitors.php?id=$row[id]\">$row[ip]</a></p>\n"; } } if( ! empty($id) ) { $result = mysql_query("SELECT * FROM userinfo WHERE id=$id", $link); $rivi = mysql_fetch_array($result); print "<p>Host: $rivi[host]</p>\n"; print "<p>IP: $rivi[ip]</p>\n"; print "<p>User Agent: $rivi[agent]</p>\n"; print "<p>Kellon aika: "; print date("j.m.Y H:i:s", $rivi[time]); print "</p>\n"; print "<p>Referer: $rivi[referer]</p>\n"; print "<a href=\"$HTTP_REFERER\">Takaisin</a>\n"; } dbclose(); ?> </body> </html>
Käyttö omilla sivuilla
<?php include ("functions.php"); saveStats(); ?>
Ihan kiiva..olisin itekkin osannu teha mut ei ollu aikaa ni lunttasin sulta!muista v^^^^ k^^^^^!!jesss!
Jos nyt pidetään IP osoitetta relatiivisena yhtäänminkään mittana niin mainittakoon että @ saa käyttää ethän mysql_queryn edessä ethän halua jäädä vakoilusta kiinni housut jalassa jos ongelmia.
Kannattaa myös huomioida, että soittosarjoja käyttävät(>70%) saavat usein samoja IP osoitteita. Myös proxyn tai NATin takaa selaavat saavat vain yhden IP:n. Tällöin avuksi tulee HTTP_X_FORWORDED_FOR, jolla saat NAT/proxyn takaisen IP:n. Huomaa kuitenkin ettei tällöinkään tule jättä REMOTE_ADDR huomitta sillä esim. NATin takana suositaan privaatti verkko-osoitteita. On siis syytä kirjata lokiin molemmat.
Saattaa olla myös hauska seurata linkityksia sivuillesi, jolloin HTTP_REFERER on kiva lisä tallentaa, mutta tuskin halua kaikkia omien sivujesi ristiin linkityksiä seurata joten ota ne pois asettamalla sivusi osoita neulaksi ja referer heinäkasaksi. Huomaa vielä että JavaScript käytää referer istä muotoa referrer. Saattaa sekottaa :)
http://www.mureakuha.com/code/PHP/357/IP
On varsin nokkela todellisen ip hakia koodi joka ei tosin huomio NAT/proxy ongelmaa, mutta on tulys lytätty arvioineissa lähelle 1. Noo vissiin täällä ei mitään todellis koodaamista harrasteta,
anteeksi häiriö
tota ei toiminut mulla tämä koodi enää tänävuonna :P
errorit
Warning: mysql_fetch_array(): The result type should be either MYSQL_NUM, MYSQL_ASSOC or MYSQL_BOTH. in /var/www/virtual/verkkopalvelin.net/htdocs/functions.php on line 25
Aihe on jo aika vanha, joten et voi enää vastata siihen.