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

Тема в разделе "PHP", создана пользователем zsaz, 7 апр 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. zsaz

    zsaz

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

    Лариса Читатель

    Заблокирован
    Регистр.:
    21 сен 2007
    Сообщения:
    390
    Симпатии:
    128
    хвалят вот этот скрипт. бесплатный, есть демо (но функций побольше чем вам надо)
    http://www.aardvarktopsitesphp.com/
    а здесь http://www.nulled.ws/forumdisplay.php?f=204 ветка обсуждения скриптов счетчиков.
     
    zsaz нравится это.
  3. mywebsru

    mywebsru Создатель

    Регистр.:
    13 фев 2009
    Сообщения:
    17
    Симпатии:
    5
    Если писать счетчик самому

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

    Код для установки на страницы сайта
    Код:
    <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, т.е. http://site.ru/img_counter.php, можно на том же, где сайт
    Код:
    <?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.
     
  4. Ruslanych

    Ruslanych Создатель

    Регистр.:
    17 фев 2009
    Сообщения:
    37
    Симпатии:
    8
    Рекомендую еще предусмотреть защиту от всяческий ботов и поисковых роботов, а то показания могут быть некорректными.
     
  5. amenor

    amenor Читатель

    Заблокирован
    Регистр.:
    3 фев 2009
    Сообщения:
    94
    Симпатии:
    17
    Недавно интересовало тоже самое, но когда разбарить начал понял что проблем будет много. Сейчас использую cnstat, посмотри на форуме здесь, должно понравиться.
     
  6. MyCreature

    MyCreature Постоялец

    Регистр.:
    5 окт 2008
    Сообщения:
    83
    Симпатии:
    5
    А я вот не понимаю. Зачем пользоваться самописными счетчиками?
    Кроме дополнительной нагрузки на сервер, малой информативности и разного рода проблем при установке не вижу.

    PS. К примеру я пользуюсь google.com/analytics и всем доволен.
     
  7. KirillK

    KirillK Постоялец

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

    sinchro Создатель

    Регистр.:
    20 янв 2009
    Сообщения:
    12
    Симпатии:
    0
    Верно, если уж г.аналитикс сложный, пользуй лирушные счетчики, они весьма информатичные, можно в рунете и невидимки найти...
     
  9. zsaz

    zsaz

    Регистр.:
    6 авг 2007
    Сообщения:
    251
    Симпатии:
    11
    Раз уж подняли почти годовалую тему, то отвечу - надо начальству иметь свой личный счетчик... типа салидно...
    но пришлось отказаться хз из-за чего... ну и ладно, меньше проблем:)
     
  10. zsaz

    zsaz

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