Создание своего счетчика

Статус
В этой теме нельзя размещать новые ответы.

zsaz

Старатель
Регистрация
6 Авг 2007
Сообщения
251
Реакции
11
Подскажите пожалуйста, как можно написать свой счетчик на сайт... нужно чтобы он считал кол-во онлайн, кол-во за сегодня, кол-во всего и кол-во хостов....
 
  • Заблокирован
  • #2
Подскажите пожалуйста, как можно написать свой счетчик на сайт... нужно чтобы он считал кол-во онлайн, кол-во за сегодня, кол-во всего и кол-во хостов....

хвалят вот этот скрипт. бесплатный, есть демо (но функций побольше чем вам надо)

а здесь Для просмотра ссылки Войди или Зарегистрируйся ветка обсуждения скриптов счетчиков.
 
  • Нравится
Реакции: zsaz
Если писать счетчик самому

А я вот такой написал

Код для установки на страницы сайта
Код:
<script type="text/javascript">document.write("<a href='http://site.ru/'><img src='http://site.ru/img_counter.php?ref=" + escape(document.referrer)+"' border='0'></a>");</script>

Код для установки на сервере где есть mysql, т.е. Для просмотра ссылки Войди или Зарегистрируйся, можно на том же, где сайт
Код:
<?php
session_start();

mysql_connect($mysql_server,$mysql_user,$mysql_pass);
mysql_select_db($mysql_database);

//Получение времени UNIX в секундах сейчас и того, что было сегодня в полночь
$time_now=time();
$date_array=getdate ($time_now);
$time_today_midnight = mktime(0, 0, 0, $date_array[mon], $date_array[mday], $date_array[year]);
$page_format_date_today=date("Ymd", $time_now);

//Получение самых нужных данных
$tmp_array=parse_url($_SERVER["HTTP_REFERER"]);
$server_page=$_SERVER["HTTP_REFERER"];
$server_name=$tmp_array[host];
$server_name=str_replace("www.","", $server_name);


#if it is not user
if ($my_agent=='3128')
{session_register(my_agent);}
else
{
	# добавить посетитетеля в отчет
	if ($is_out_ref=="")
	{
	#this is intranet
	$is_out_ref="no";
	session_register(is_out_ref);
	$unix_time=time();
	$ref=$_GET["ref"];
	$ip=$_SERVER['REMOTE_ADDR'];
	$this_page=$PHP_SELF;
	$us_ag=$_SERVER["HTTP_USER_AGENT"];
	

	//mysql_query("INSERT INTO $referer (unix_time, ip, referer, page, user_agent) VALUES ('$unix_time', '$ip', '$ref', '$this_page', '$us_ag')");
		if (strpos($ref, "http")!==false && strpos($ref, "$server_name")===false)
		{		
		$result=mysql_query("SELECT id FROM mws_sc_referer WHERE site='$server_name' ORDER BY id DESC LIMIT 1");
		list($id)=mysql_fetch_row($result);		
		$id++;
		mysql_query("INSERT into mws_sc_referer VALUES ('$server_name', ".($id).", $unix_time, '$ip', '$ref', '".$_SERVER["HTTP_REFERER"]."', '$us_ag')");		
		}
		else
		{
		$result=mysql_query("SELECT id FROM mws_sc_referer_extra WHERE site='$server_name' ORDER BY id DESC LIMIT 1");
		list($id_extra)=mysql_fetch_row($result);
		$id_extra++;
		mysql_query("INSERT into mws_sc_referer_extra VALUES ('$server_name', ".($id_extra).", $unix_time, '$ip', '$ref', '".$_SERVER["HTTP_REFERER"]."', '$us_ag')");				
		}
/**/		
	}
	else
	{
	$test="$site_name";	 
	}

$result=mysql_query("SELECT count FROM mws_sc_counter  WHERE date='$page_format_date_today' AND site='$server_name' AND name='$server_page'");
list($count)=mysql_fetch_row($result);$count++;
	if($count==1)
	{	
	$result=mysql_query("INSERT INTO mws_sc_counter VALUES ('$server_name', $count, '$server_page', $page_format_date_today)");
	}
	else
	{
	$result=mysql_query("UPDATE mws_sc_counter SET count = LAST_INSERT_ID(count+1)  WHERE date='$page_format_date_today' AND site='$server_name' AND name='$server_page' ");
	}
	/**/
}
	 

$result=mysql_query("SELECT id FROM mws_sc_referer WHERE unix_time>=$time_today_midnight AND site='$server_name'");
$users_today=mysql_num_rows($result);	
$result=mysql_query("SELECT count FROM mws_sc_counter  WHERE date='$page_format_date_today' AND site='$server_name'");
$pages_all_today=0;
while(list($count)=mysql_fetch_row($result))
{$pages_all_today+=$count;}


$image = imagecreate(88, 31);
$white=ImageColorAllocate($image, 244, 244, 244);
$black=ImageColorAllocate($image, 0, 0, 0);
imageline ( $image, 0, 0, 88, 0, $black);
imageline ( $image, 0, 30, 88, 30, $black);
imageline ( $image, 0, 0, 0, 31, $black);
imageline ( $image, 87, 31, 87, 0, $black);
imagestring ( $image, 2, 6, 8, ($pages_all_today+0)." pages", $black);
imagestring ( $image, 2, 6, 17, ($users_today+0)." users", $black);
$test=array(0,0,88,0,88,9,0,9);
imagefilledpolygon($image, $test, 4, $black);
imagestring ( $image, 1, 6, 1, "SC MyWebS: Today", $white);
header("Content-type: image/jpeg");
imagejpeg($image, "", 90);
imagedestroy($image);
?>

Из примера должно быть все более менее ястно, скрипт выдает картинку и вносит данные в базу (ну и получает данные на сегодня чтобы нарисовать картинку). Еще есть у меня база mws_sc_referer_extra, для роботов... это немного путает.)) Ну и вообще скрипт долго писал, потом переписывал, наверно некрасиво получилось, но у меня работает.

Дополнительно можно привести скрипт для создания таблиц данных mysql
mws_sc_referer - пользователи
mws_sc_referer_extra - роботы и хакеры
mws_sc_counter - страницы


Код:
<?php

mysql_connect($mysql_server,$mysql_user,$mysql_pass);
mysql_select_db($mysql_database);

mysql_query("
CREATE TABLE mws_sc_referer
(
site varchar(255),
id int,
unix_time int,
ip varchar(255),
referer text,
page varchar(255),
user_agent varchar(255)
)
");

mysql_query("
CREATE TABLE mws_sc_referer_extra
(
site varchar(255),
id int,
unix_time int,
ip varchar(255),
referer varchar(255),
page varchar(255),
user_agent varchar(255)
)
");

mysql_query("
CREATE TABLE mws_sc_counter
(
site varchar(255),
count INT,
name varchar(255),
date INT
)
");
?>

Я выдрал куски из своего кода, поэтому если что-то немнлжко не работает я не виноват.)))

И еще после того как скрипт заработает, статистику придеться смотреть через php my admin, что не плохо, но графики вы не увидите. А так надо писать еще часть скрипта, который строил бы графики и выводил таблицы согласно данным из mysql.
 
Рекомендую еще предусмотреть защиту от всяческий ботов и поисковых роботов, а то показания могут быть некорректными.
 
  • Заблокирован
  • #5
Недавно интересовало тоже самое, но когда разбарить начал понял что проблем будет много. Сейчас использую cnstat, посмотри на форуме здесь, должно понравиться.
 
А я вот не понимаю. Зачем пользоваться самописными счетчиками?
Кроме дополнительной нагрузки на сервер, малой информативности и разного рода проблем при установке не вижу.

PS. К примеру я пользуюсь google.com/analytics и всем доволен.
 
Кроме дополнительной нагрузки на сервер,

Согласен. Некоторые хостера (не буду приводить пример) даже не принимают сайты, так как сами понимаете, что идёт большая нагрузка. ТС, а зачем Вам счётчик личный, если не секрет?
 
Верно, если уж г.аналитикс сложный, пользуй лирушные счетчики, они весьма информатичные, можно в рунете и невидимки найти...
 
Раз уж подняли почти годовалую тему, то отвечу - надо начальству иметь свой личный счетчик... типа салидно...
но пришлось отказаться хз из-за чего... ну и ладно, меньше проблем:)
 
а можете мне тоже помоч? я ищу такой счётчик чтобы считал не сколько рас зашли на сайт, а сохроняет как бы ИП с которого заходил тот или иной человек и при следующем входе на сайт чтобы его больше не считало, такое возможно?

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