©
Design by Lukasz Sebestyanski
lukasz@ragelegends.com
Law Firm Thailand |
© vidmo.net 2000-2006 Contact: root{a.t}vidmo.net
Thai web design portfolio |
Astrolabe
/*
// robots_counter.php
// Skrypt do zlicznia odwiedzin strony przez roboty Google, MSN, Yahoo!
// Dane odwiedzin są przechowywane w pliku.
//
// Copyright (C) 2006 Yuriy Hatala (yuriy@myth.org.ua)
//
// Niniejszy program jest wolnym oprogramowaniem; możesz go
// rozprowadzać dalej i/lub modyfikować na warunkach Powszechnej
// Licencji Publicznej GNU, wydanej przez Fundację Wolnego
// Oprogramowania - według wersji 2-giej tej Licencji lub której
// z póniejszych wersji.
//
// Niniejszy program rozpowszechniany jest z nadzieją, iż będzie on
// użyteczny - jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domylnej
// gwarancji PRZYDATNOCI HANDLOWEJ albo PRZYDATNOCI DO OKRELONYCH
// ZASTOSOWAŃ. W celu uzyskania bliższych informacji - Powszechna
// Licencja Publiczna GNU.
*/
/*
// INSTALACJA
// ----------------------------------------------------------------------
// 1. Sworzyc na serwerze plik "robot.db" z prawami do zapisu
// 2. Skopijowac plik "robots_counter.php" na serwer
//
// JAK KORZYSTAC ZE SKRYPTU
// ----------------------------------------------------------------------
// Wystarczy dodac do strony, dla której chcemy zliczac odwiedziny robotów,
// kod
// include("robots_counter.php");
//
// a następnie dane o odwiedzinach poszczególnych robotów można odczytać
// ze zmiennej $PageInfo
// - dla Google - $PageInfo['googlebot']
// - dla MSN - $PageInfo['msnbot']
// - dla Yahoo! - $PageInfo['yahoo']
*/
$flExists = FALSE;
$RobotDB = "robot.db";
$RobotArray = array("googlebot", "msnbot", "yahoo");
$CurrentPage = md5($_SERVER['REQUEST_URI']);
$CurrentBot = strtolower($_SERVER['HTTP_USER_AGENT']);
if (preg_match(sprintf("/%s/", join("|", $RobotArray)), $CurrentBot))
{
foreach ($RobotArray as $key => $value)
{ if (preg_match(sprintf("/%s/", $value), $CurrentBot)) { break; } }
if (file_exists($RobotDB) && (is_readable($RobotDB) && is_writable($RobotDB)))
{
$DBHandle = fopen($RobotDB, "r+");
if (is_resource($DBHandle) && flock($DBHandle, LOCK_EX))
{
$Line = fgets($DBHandle, 61);
while (!feof($DBHandle))
{
$PageInfo = unpack("A32Page/Vgooglebot/Vmsnbot/Vyahoo", base64_decode($Line));
if (preg_match(sprintf("/%s/", $CurrentPage), $PageInfo['Page']))
{
$flExists = TRUE;
$CurrentPos = ftell($DBHandle);
fseek($DBHandle, 0, SEEK_END);
}
$Line = fgets($DBHandle, 61);
}
if (!$flExists)
{
fseek($DBHandle, 0, SEEK_END);
$PageInfo = array_merge($CurrentPage, array('googlebot' => 0, 'msnbot' => 0, 'yahoo' => 0));
}
else { fseek($DBHandle, ($CurrentPos - 60), SEEK_SET); }
$PageInfo[ $RobotArray[$key] ] = $PageInfo[ $RobotArray[$key] ] + 1;
// print_r($PageInfo);
fwrite($DBHandle, base64_encode(pack("A*VVV", $CurrentPage, $PageInfo['googlebot'], $PageInfo['msnbot'], $PageInfo['yahoo'])));
flock($DBHandle, LOCK_UN);
}
fclose($DBHandle);
}
}
else
{
if (file_exists($RobotDB) && is_readable($RobotDB))
{
$DBHandle = fopen($RobotDB, "r");
if (is_resource($DBHandle))
{
$Line = fgets($DBHandle, 61);
while (!feof($DBHandle))
{
$PageInfo = unpack("A32Page/Vgooglebot/Vmsnbot/Vyahoo", base64_decode($Line));
if (preg_match(sprintf("/%s/", $CurrentPage), $PageInfo['Page']))
{
$flExists = TRUE;
$CurrentPos = ftell($DBHandle);
fseek($DBHandle, 0, SEEK_END);
}
$Line = fgets($DBHandle, 61);
}
}
fclose($DBHandle);
if (!$flExists) { $PageInfo = array('googlebot' => 0, 'msnbot' => 0, 'yahoo' => 0); }
}
}
?>
|