Статья
Версия для печати
Обсудить на форуме
Учимся считать посетителей сайта


Итак, мы попытаемся рассмотреть в этой статье основные принципы для построения счетчиков посетителей, а так же попытаемся проанализировать, какой раздел нашего сайта пользуется наибольшей популярностью.

Для работы нам понадобится  два файла - первый собственно для самого скрипта и второй для счетчика. Файл счетчика должен содержать следующую информацию: в первой строке начальное значение для загруженных страниц, во второй строке начальное значение для количества уникальных посетителей.

Приступим к написанию сам ого скрипта. Как известно  любой 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")+1date("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 (
$fpfwrite($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(&#39;d M Y, H:i:s&#39;);

Далее все это следует сохранить в базе данных. Например так:
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 (&#39;$host&#39;, &#39;$ip&#39;, &#39;$browser&#39;, &#39;$os&#39;,&#39;$referer&#39;, &#39;$page&#39;, &#39;$qstring&#39;, &#39;$date&#39;)");
?>

Ну а теперь имея минимальные познания в синтаксисе mysql мы можем получить самую разнообразную информацию. Например, процентное отношение используемых браузеров или популярность разделов. Если вы еще не догадались, как это сделать, я подскажу - определяем общее количество записей в базе и делим на него, скажем, количество скажем пользователей использующих браузер MSIE.  Более сложные запросы вы сможете придумать сами.

Посмотреть, как все это работает можно посмотреть как всегда на ancient.dax.ru
Версия для печати
Обсудить на форуме