| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
vierailijastatistiikan keräinpiisami 08.08.04 01:31 Viikottainen/kuukausittainen vierailijastatistiikka käyttäjän resoluution tallennuksella.
<?php /* stats.php v.1.0 - vierailijastatistiikan keräin Kirjoitteli 22.7.2004 Piisami junassa Hki-Pori Päivitetty 9.1.2005 Vierailijatietojen keräin pienimuotoisille sivustoille ilman tietokantamahdollisuutta tai valmista statistiikkapalvelua. Skripti kerää vierailijatietoja tekstitiedostoihin viikoittain tai kuukausittain lajiteltuna. Lähettää jakson lopuksi tiedot mailina. Hakee näytön resoluution JavaScriptiä hyödyntäen. Tätä en ole saanut toimimaan kunnolla samanaikaisesti refererin (tulosivu) tallennuksen kanssa. Vinkkejä kaivataan! Esimerkki siitä, miten tätä raporttia voi esittää graafisesti, löytyy Mureakuha.comin PHP-pätkistä nimellä "vierailijastatistiikka graafisesti". Tällöin tiedot pitää asettaa tallentumaan tiedostoon samalle riville ($rivitys = 1). Tarkista alla olevat muuttujat ennen kokeilua ja luo tarvittava hakemisto kirjoitusoikeuksilla. Tallenna skripti vaikka nimellä stats.php ja lisää rivi: include("stats.php"); niille sivuille, joilta haluat vierailijatiedot kerätä. */ // konfiguroitavat muuttujat $jakso = 0; // raportin jakso: 0 = viikoittain, 1 = kuukausittain $rivitys = 1; // 0 = tiedot kävijästä omille riveilleen, 1 = tiedot kävistä yhdelle riville (oltava 1, jos käytät graafista) $resoluutio = 1; // 0 = ei resoluution tallennusta, referer tallennetaan, 1 = resoluution tallennus, ei refereriä $silent = 0; // 0 = herjaa, jos ei pysty kirjoittamaan statistiikkatiedostoon, 1 = ei virheilmoitusta tästä $webmaster = "webmaster@inarinesso.org"; // mihin osoitteeseen raportti lähetetään $statsdir = "stats/"; // statistiikan hakemisto, joka on itse luotava ja annettava oikeudet kirjoittaa $ignoreip = "82.181.59.233"; // ip-osoite, jota ei tallenneta, esim. webmasterin oma. // --- aletaan hakea käyttäjästä kerättäviä tietoja muuttujiin if(!$REMOTE_HOST) { // jos hostia ei ole määritelty, haetaan ip-osoitteelle host, $hostNimi = gethostbyaddr($REMOTE_ADDR); } else { // muuten käytetään tunnettua nimeä. $hostNimi=$REMOTE_HOST; } $aikaleima = date("Y-m-d H:i:s"); $ip = $_SERVER['REMOTE_ADDR']; //$ip = $_SERVER['HTTP_X_FORWARDED_FOR']; // saunalahden palvelimella vaati näin, eli poista silloin kommentointi rivin alusta $selain = $_SERVER['HTTP_USER_AGENT']; // $host = gethostbyaddr($REMOTE_ADDR); //$host = gethostbyaddr($ip); // saunalahden palvelimella näytti vaativan näin, eli poista silloin kommentointi rivin alusta $serveri = $SERVER_NAME; $url = "$serveri.$REQUEST_URI"; if ($ip == $ignoreip) return; //lopetetaan skripti, jos kävijä ignoreip:stä (omasta osoitteesta) // --- javascripti edelleenohjaa, joten haetaan referer (tulosivu) vain jos resoa ei ole jo haettu // --- mutta näinhän se ei toimi, nyt voidaan hakea vain joko referer tai reso if (!isset($referer)) { $referer = $_SERVER['HTTP_REFERER'];} // --- haetaan vierailijan näytön resoluutio muuttujiin luomalla php:llä javascriptiä + refresh if ($resoluutio == 1) { if (isset($_GET['width']) AND isset($_GET['height'])) { $screenwidth = $_GET['width']; $screenheight = $_GET['height']; } else { echo "<script type='text/javascript'>\n"; echo " location.href=\"${_SERVER['SCRIPT_NAME']}?${_SERVER['QUERY_STRING']}" . "&width=\" + screen.width + \"&height=\" + screen.height;\n"; echo "</script>\n"; exit(); } } // --- haetaan muuttujiin nykyisen ja edellisen statistiikkatiedoston mahdolliset tiedostonimet if ($jakso >= 1) { $currentfile = $statsdir.date("Y_\mo\\n\\t\h_n_")."stats.txt"; } else { $currentfile = $statsdir.date("Y_\week_W_")."stats.txt"; if ((date("W") == 53 OR date("W") == 52) AND date("n") == 01) { $currentfile = $statsdir.(date("Y")-1).date("_\week_W_")."stats.txt"; } } if ($jakso >= 1 and date("n") == 1) { $previousfile = $statsdir.(date("Y")-1).date("_\mo\\n\\t\h_12")."_stats.txt"; } else { $previousfile = $statsdir.date("Y_\mo\\n\\t\h_").(date("n")-1)."_stats.txt"; } if ($jakso == 0) { $previousfile = $statsdir.date("Y_\week_").(date("W")-1)."_stats.txt"; // --- jos viikko 53 uuden vuoden puolella if (date("W") == 53 AND date("n") == 01) $previousfile = $statsdir.(date("Y")-1).date("_\week_52_")."stats.txt"; // --- jos viikko 52 uuden vuoden puolella if (date("W") == 52 AND date("n") == 01) $previousfile = $statsdir.(date("Y")-1).date("_\week_51_")."stats.txt"; } if ($jakso == 0 and date("W") == 1) { // jos eletään viikkoa 1, niin etsitään edellisen vuoden viikkoa 53 tai 52 if(file_exists($statsdir.(date("Y")-1)."_week_53_stats.txt")) $previousfile = $statsdir.(date("Y")-1)."_week_53_stats.txt"; else $previousfile = $statsdir.(date("Y")-1)."_week_52_stats.txt"; } // --- jos löytyy edellisen kauden statistiikka, muttei vielä nykyistä, lähetetään edellinen sähköpostilla if (file_exists($previousfile) and !file_exists($currentfile)) { $maildata=file_get_contents($previousfile); $mailsubject = "WWW-statistiikka ".($jakso >= 1 ? date("F Y") : "viikko ".date("W/Y")); mail($webmaster,$mailsubject,$maildata); $file = fopen($currentfile, "a+"); // luodaan tässä jo tiedosto seuraavaa varten fclose($file); chmod($currentfile, 0770); // kokeile itselle sopiva tiukin oikeusasetus } if ($rivitys == 0) { // kootaan tiedot erotettuina rivinvaihdoilla, loppuun viiva erottamaan kävijä seuraavasta $kavija = "Aikaleima: $aikaleima\nIP: $ip\nSelain: $selain\nYhteys: $host\nNykyinen URL: $url\n Edellinen URL: $referer\nResoluutio: $screenwidth x $screenheight\n------------------------\n"; } else { // tai yhdistetään kaikki tiedot yhdeksi riviksi $kavija = "$selain|$ip|$host|$referer|$url|$screenwidth x $screenheight|$aikaleima| \r\n"; } // --- avataan tiedosto ja kirjoitetaan tiedot siihen if ($silent == 0) { $file = fopen($currentfile, "a+"); } else { @$file = fopen($currentfile, "a+"); } if($file) { flock($file, LOCK_EX); // tiedostolle päälle exclusive-lukko, koska osumia saattaa tulla samanaikaisesti fputs($file, $kavija); flock($file, LOCK_UN); // vapautetaan lukko fclose($file); } ?> editoitu: 15:12 9.1.05 piisami 01:48 8.8.04 Lisäsin koodikirjastoon tähän sopivan erillisen grafiikan esittäjän Mikrobitin artikkelin 9/2004 opastuksella. Kerääjään lisäsin samalla pari ominaisuutta ja korjasin pahan virheen, joka liittyi vuodenvaihteen viikkonumerointiin. lahtis 04:02 8.8.04 tuo näytön reson kaapaaminen on ihan kiinnostava ominaisuus joka puuttuu melkein kaikista statistiikka kereilijöistä. Hienoa.. ane 11:56 8.8.04 Voisit vähän sisentää koodiasi. Kamalaa katsottavaa. :( Juice_ 21:56 8.8.04 Ite meinasin tehdä tollasen vaan onneksi joku muu teki niin ei itte tarvinnu ruveta äheltämään. piisami 23:17 8.8.04 Anzuhan, toivottavasti nyt kelpaa edes vähän paremmin koodisilmällesi :) Itse kun en skriptejä kirjoittele kuin pakon edessä. renni 13:59 9.8.04 Hyvin kommentoitu ja selkeä toiminta. Juice_ 21:35 9.8.04 No joo, tämä menee jo tosi nipottamiseksi: Voisit muuttaa tätä koodivinkkiä validimmaksi elikkäs vaihda kohta < script language="javascript"> muotoon < script type="text/javascript"> lahtis 05:49 25.8.04 joo kiva scripti, itse otin heti käyttöön kun ei missään muissa statistiikka palveluissa ei ole tuota resoluution nappaajaa käytössä. Vielä kun saisi statistiikat graafisena. piisami 14:41 26.9.04 Jep, on kyllä tarkoitus tehdä graafinen statistiikan seurain, ennen joulua ehkä :) Jos haluaa tuollaisen heti, niin huomasin elokuun (?) Mikrobitissä olevan juuri tästä hyvä ja selkeä artikkeli. lahtis 06:29 16.11.04 olisi mukavaa jos tällä scriptillä voisi myös tarkistaa onko javascripti ja keksit päällä. Tallentaisi sen tietoihin. (itse kokeilin mutta huonolla menestyksellä.) pi 20:17 12.2.06 Voisko sen refererin lähettää ittelleen uudestaan tyyliin: <?php echo " location.href=\"${_SERVER['SCRIPT_NAME']}?${_SERVER['QUERY_STRING']}" . "&width=\" + screen.width + \"&height=\" + screen.height + \"&referer=\"" . $_SERVER['HTTP_REFERER'] . ";\n"; ?> Ja lukea sitten siitä $_GET['referer']; sprawl 18:29 5.4.06 Warning: gethostbyaddr(): Address is not a valid IPv4 or IPv6 address in /home/sprawl/domains/mekeilaajat.arkku.net/public_html/stats/stats.php on line 37 Warning: gethostbyaddr(): Address is not a valid IPv4 or IPv6 address in /home/sprawl/domains/mekeilaajat.arkku.net/public_html/stats/stats.php on line 47 Mitäs nämä meinaaavat. Rivit stats.php filussa: $hostNimi = gethostbyaddr($REMOTE_ADDR); ja $host = gethostbyaddr($REMOTE_ADDR); Mitenkäs nämä korjataan ? editoitu: 19:16 29.10.06 ape10 17:49 29.10.06 Tosi hyvä! Ainoastaan toi räikeys häiritsee. |
![]() Haku
|