Итак, мы попытаемся рассмотреть в этой статье основные принципы для построения счетчиков посетителей, а так же попытаемся проанализировать, какой раздел нашего сайта пользуется наибольшей популярностью.
Для работы нам понадобится два файла - первый собственно для самого скрипта и второй для счетчика. Файл счетчика должен содержать следующую информацию: в первой строке начальное значение для загруженных страниц, во второй строке начальное значение для количества уникальных посетителей.
Приступим к написанию сам ого скрипта. Как известно любой php-скрипт начинается с
<?
Заметьте, что перед этими символами нельзя помещать никакую другую информацию (даже пробелы и переводы строк). Это связанно с алгоритмом установкой cookie.
$filename = "counter.log";
$counter = file($filename);
for ($i=0; $i<sizeof($counter); $i++)
{
$counter[$i] = trim(str_replace ("n","", $counter[$i]));
}
Данная часть кода считывает содержимое файла counter.log в массив строк. Но так как в конце каждой строки содержится символ n и возможно лишние пробелы в начале и конце строки, нам необходимо от них избавиться, что мы и делаем. В итоге получаем массив $counter[] в котором нулевое значение это количество загрузок страниц, а первый элемент - количество уникальных посетителей.
$curdate = mktime (0,0,0,date("m"), date("d"), date("Y"));
$nextday = mktime (0,0,0,date("m"), date("d")+1, date("Y"));
if (!isset($_COOKIE["lastvisit"]))
{
$counter[1]++;
$counter[0]++;
setcookie ("lastvisit", $curdate, $nextday);
}
else {
$counter[0]++;
}
Далее мы пытаемся определить уникальный ли это пользователь или нет. Уникальным в данном случае считается новый пользователь или тот, кто зашел не ранее чем через 1 день с момента последнего посещения (это простая условность, можете изменять по своему усмотрению) . Для этого мы проверяем его cookie на наличие нашей печенки ;) с именем lastvisit. Если таковой нет, мы увеличиваем счетчик загрузок страниц и счетчик уникальных посетителей, а после этого ставим ему нашу печенку с временем жизни 1 день.
$counter[0] = $counter[0]."n";
$counter[1] = $counter[1]."n";
$counter = implode("", $counter);
$fp = fopen($filename, "w");
if ($fp) fwrite($fp, $counter);
fclose($fp);
Приводим наш массив к нужному виду, добавляя перевод строки к каждому элементу, и записываем опять в файл.
Как видите, нет ничего проще, чем написать счетчик посетителей вашего файла. Конечно, данный пример не учитывает тех пользователей у которых запрещена установка cookie (параноики, не правда ли?), но я думаю, что после прочтения данной статьи вам не составит труда его изменить под свои нужды.
Далее мы попытаемся проанализировать в какие разделы нашего сайта чаще забредают пользователи, какие браузеры и ОС они используют и т.д.
$page = $_SERVER["PHP_SELF"];
$qstring = $_SERVER["QUERY_STRING"];
Получаем имя браузера:
if (strstr($_SERVER["HTTP_USER_AGENT"], "Nav")) $browser = "Netscape";
elseif (strstr($_SERVER["HTTP_USER_AGENT"], "MSIE")) $browser = "MSIE";
elseif (strstr($_SERVER["HTTP_USER_AGENT"], "Lynx")) $browser = "Lynx";
elseif (strstr($_SERVER["HTTP_USER_AGENT"], "Opera")) $browser = "Opera";
elseif (strstr($_SERVER["HTTP_USER_AGENT"], "WebTV")) $browser = "WebTV";
elseif (strstr($_SERVER["HTTP_USER_AGENT"], "Konqueror")) $browser = "Konqueror";
elseif (strstr($_SERVER["HTTP_USER_AGENT"], "Bot")) $browser = "Bot";
else $browser = "Other";
Название операционной системы:
if((strstr($_SERVER["HTTP_USER_AGENT"], "Win")) $os = "Windows";
elseif (strstr($_SERVER["HTTP_USER_AGENT"], "Mac")) || (ereg("PPC", etenv("HTTP_USER_AGENT")))) $os = "Mac";
elseif (strstr($_SERVER["HTTP_USER_AGENT"], "Linux")) $os = "Linux";
elseif (strstr($_SERVER["HTTP_USER_AGENT"], "FreeBSD")) $os = "FreeBSD";
elseif (strstr($_SERVER["HTTP_USER_AGENT"], "SunOS")) $os = "SunOS";
elseif (strstr($_SERVER["HTTP_USER_AGENT"], "IRIX")) $os = "IRIX";
elseif (strstr($_SERVER["HTTP_USER_AGENT"], "BeOS")) $os = "BeOS";
elseif (strstr($_SERVER["HTTP_USER_AGENT"], "OS/2")) $os = "OS/2";
elseif (strstr($_SERVER["HTTP_USER_AGENT"], "AIX")) $os = "AIX";
else $os = "Other";
Определяем IP, имя хоста и реферер пользователя:
if (isset ($_SERVER["HTTP_X_FORWARDED_FOR"]))
{ $host = gethostbyaddr($_SERVER["HTTP_X_FORWARDED_FOR"]; }
else{ $host = gethostbyaddr($_SERVER["REMOTE_ADDR"]); }
$ip= $_SERVER["REMOTE_ADDR"];
$referer = $_SERVER["HTTP_REFERER"];
$date=date('d M Y, H:i:s');
Далее все это следует сохранить в базе данных. Например так:
function connect_db()
{
global $pass,$login, $database_name;
mysql_connect("localhost",$login,$pass);
$db=mysql_select_db("$database_name");
return $db;
}
connect_db();
mysql_query("INSERT INTO stat VALUES ('$host', '$ip', '$browser', '$os','$referer', '$page', '$qstring', '$date')");
?>
Ну а теперь имея минимальные познания в синтаксисе mysql мы можем получить самую разнообразную информацию. Например, процентное отношение используемых браузеров или популярность разделов. Если вы еще не догадались, как это сделать, я подскажу - определяем общее количество записей в базе и делим на него, скажем, количество скажем пользователей использующих браузер MSIE. Более сложные запросы вы сможете придумать сами.
Посмотреть, как все это работает можно посмотреть как всегда на
ancient.dax.ru