Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Haamukävijät kävijälaskurissa

juha127 [04.11.2007 10:46:57]

#

Ajattelin kerrankin tehdä sivuille itse oman kävijälaskurin, enkä tyytyä valmiiseen tarjontaan.
Ehdein väsätä alun, joka laskee uniikit ja sivunlataukset, mutta ottaa mukaan palvelimen sivulatauksia. Aloin ihmettelemään, miksi tietokantaan tulee "::1" tyylisiä ip-osoitteita. Ja sain selville lisäämällä hostin tallettamisen, että kyseessä oli itse palvelinohjelma Apache2. Päädyin tekemään purkan, että jos kantaan tarjottiin kyseistä ip:tä, niin kaikki laskurin tietokantakyselyt ohitetaan.
Tämä purkka toimi vähän aikaa, mutta pian tuli uusi ongelma. Apachen pirulainen tuli tietokantaan ip:llä 127.0.0.1, jotenka päädyin tekemään toisen purkan.
Pohjustuksen jälkeen kysyisinkin, onko vika tavassani ottaa talteen tietoja, vai onko vika apachessa.

Kävijälaskurin "kerääväosa":

<?php

// Kävijälaskuri //

// Kerätään tietoja kävijästä
$ip = $_SERVER['REMOTE_ADDR'];
$host = $_SERVER['HTTP_USER_AGENT'];
$referer = $_SERVER['HTTP_REFERER'];

if ($ip == "::1" OR $ip == "127.0.0.1") { }
else {
$haku = db_query("SELECT * FROM kavijat WHERE ip = ". db_escape($ip));
$aika = time();

switch(mysql_numrows($haku)) {
	case 0:
	{
		db_query("INSERT INTO kavijat (ip, referer, latauksia, viime_lataus, host) VALUE (". db_escape($ip) .", ". db_escape($referer) .", 1, ". $aika .", ". db_escape($host) .")");
		break;
	}

	case 1:
	{
		db_query("UPDATE kavijat SET latauksia = latauksia + 1, viime_lataus = ". $aika .", host = ". db_escape($host) ." WHERE ip = ". db_escape($ip));
		break;
	}
}
}

?>

edit. Modit, korjatkaa yhdyssanavirhe aiheesta. Olisi kätevää, jos sitä saisi muokata itse jälkeenpäin.

Metabolix [04.11.2007 10:58:11]

#

Ei kai se Apache omia sivujaan lataile? :o Katsopa vielä, mitä User-Agent sanoo.

juha127 [04.11.2007 11:04:50]

#

Aivan, samalla rivillä missä on ip:nä on 127.0.0.1 User-Angentina Apache/2.2.4 (Ubuntu) PHP/5.2.3-1ubuntu6 (internal dummy connection).

Metabolix [04.11.2007 11:22:01]

#

Pikaisella Googletuksella selvisi, että asialla on Apachen sisäinen signaalijärjestelmä. Ohjeeksi annettiin, että tarkista Apachen asetuksista kohdat MinSpareServers ja MaxSpareServers, joista jälkimmäisen pitäisi luonnollisesti olla ensimmäistä suurempi. Ratkaisuksi mainittiin myös MPM:n vaihtaminen preforkista workeriksi. http://www.google.fr/search?q=Apache "internal dummy connection"

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta