Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> счетчик, основные понятия... 
V
    Опции темы
Teleport
Дата 4.10.2008, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 5.7.2008
Где: Прибалтика

Репутация: нет
Всего: 6



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

 Что такое все таки "хиты" и "хосты"? Что же этол имеется ввиду? Прошу "на пальцах" объяснить. smile
 И, может, еще чего интересного посоветуете насчет ведения статистики?



--------------------
user posted image
user posted image 
PM MAIL   Вверх
knitmax87
Дата 4.10.2008, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 18.3.2006

Репутация: 1
Всего: 1



в данном контексте хит - это любое посещение сайта человеком (даже одним и тем же), а хосты - это уникальные посетители.
PM MAIL ICQ GTalk   Вверх
Teleport
Дата 4.10.2008, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 5.7.2008
Где: Прибалтика

Репутация: нет
Всего: 6



knitmax87 - все понятно, спасибо.


--------------------
user posted image
user posted image 
PM MAIL   Вверх
Teleport
Дата 4.10.2008, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 5.7.2008
Где: Прибалтика

Репутация: нет
Всего: 6



а если я на локальном сервере тестирую, то у меня ведь хост будет всегда 1? можно ли как-то этого избежать?


--------------------
user posted image
user posted image 
PM MAIL   Вверх
Sunvas
Дата 4.10.2008, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Цитата(Teleport @  4.10.2008,  16:19 Найти цитируемый пост)
можно ли как-то этого избежать?

Да. Хост на локалке будет всегда (по идее) только один. А избежать этого можно простым путем. - Напишите отдельную функцию для определения хоста, и в режиме тестирования, просто сделайте, чтобы она генировала случайное число.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Teleport
Дата 4.10.2008, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 5.7.2008
Где: Прибалтика

Репутация: нет
Всего: 6



Sunvas  smile  smile  smile Точно. Чего сам не додумался не знаю. Спасибо за совет. smile))))))))))))))


--------------------
user posted image
user posted image 
PM MAIL   Вверх
Teleport
Дата 4.10.2008, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 5.7.2008
Где: Прибалтика

Репутация: нет
Всего: 6



Ссылка на статью, которую я выше приводил, почему-то нерабочая, так что выкладываю код полностью. Есть вопрос по коду счетчика. 
Код

<?php
  error_reporting(0);

  $mysqlhost    =    "localhost";
  $mysqluser    =    "root";
  $mysqlpass    =    "";
  $mysqldb        =    "counter";

  /***** Функции ********************************** Начало */
  function addSpace($num)
  {
    $strlen=17-strlen($num);
    $space=null;
    while($strlen)
    {
      $space.=" ";
      $strlen--;
    }
    return $space.$num;
  }

  function normal_numeric($number)
  {if(!isset($number))return false;
  else{$strlen=strlen($number);
  $new=null;
  for ($i=$strlen-1;$i>-1;$i--)
  {$n = $i;$n++;if(strstr($n/3,"."))$new.=$number[$strlen-1-$i];
  else if($n!=$strlen)$new.=    " ".$number[$strlen-1-$i];
  else$new.=$number[$strlen-1-$i];}
  return $new;}}
  /***** Функции ********************************** Конец */

  $time = time();
  $ip    = $_SERVER['REMOTE_ADDR'];
  $dns = gethostbyaddr($ip);
  $page = $_SERVER['REQUEST_URI'];
  $useragent = $_SERVER['HTTP_USER_AGENT'];

  $browser = 'none';
  if(strpos($useragent, "MSIE") !== false)
  if(strpos($useragent, "Opera") == null){ $browser = 'msie'; }
  if(strpos($useragent, "Opera") !== false){ $browser = 'opera'; }
  if(strpos($useragent, "Netscape") !== false){ $browser = 'netscape'; }

  $os = 'none';
  if(strpos($useragent, "Win") !== false){ $os = 'windows'; }
  if(strpos($useragent, "Linux") !== false || strpos($useragent, "Lynx") !== false || strpos($useragent, "Unix") !== false){ $os = 'unix'; }
  if(strpos($useragent, "Macintosh")!== false || strpos($useragent, "PowerPC")){ $os = 'macintosh'; }

  $screen = "{$_GET[w]}x{$_GET[h]}";

  mysql_connect($mysqlhost, $mysqluser, $mysqlpass);
  mysql_select_db($mysqldb);

  // Хосты и хиты
  $query = mysql_query("SELECT * FROM counter_hits ORDER BY id DESC LIMIT 1");
  $row = mysql_fetch_row($query);
  if(date("Ymd",$row[7]) < date("Ymd",time()))
  {
    mysql_query("TRUNCATE counter_hits");
    mysql_query("INSERT INTO counter_hits VALUES('', '$ip', '$dns', '2', '$browser', '$os', '$screen', '$time')");
    mysql_query("INSERT INTO counter_hitsbydate VALUES('', '".date("d.m.Y",time())."', '1', '1')");
  }
  else
  {
    $query2 = mysql_query("SELECT * FROM counter_hitsbydate ORDER BY id DESC LIMIT 1");
    $row2 = mysql_fetch_row($query2);
    $hits = $row2[2]+1;
    $query3 = mysql_query("SELECT * FROM counter_hits WHERE ip='$ip' LIMIT 1");
    $num = mysql_num_rows($query3);
    if($num == '0')
    {
      $host = $row2[3]+1;
      mysql_query("INSERT INTO counter_hits VALUES('', '$ip', '$dns', '1', '$browser', '$os', '$screen', '$time')");
    }
    else
    {
      $row3 = mysql_fetch_row($query3);
      $hits2 = $row3[3]+1;
      $host = $row2[3];
      mysql_query("UPDATE counter_hits SET hits='$hits2', time='$time' WHERE ip='$ip' LIMIT 1");
    }
    mysql_query("UPDATE counter_hitsbydate SET hits='$hits', host='$host' WHERE date='".date("d.m.Y",time())."' LIMIT 1");
  }

  $query = mysql_query("SELECT * FROM counter_hitsbydate");
  $hits_all = 0;
  while($row = mysql_fetch_row($query)){ $hits_all = $hits_all+$row[2]; }

  mysql_close();

  /******************************
  *
  * Вывод всего на картинку
  *
  ******************************/

  header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
  header("Cache-Control: no-store, no-cache, must-revalidate");
  header("Cache-Control: post-check=0, pre-check=0", false);
  header("Pragma: no-cache");
  header("Content-type: image/png".chr(10).chr(10)); 

  $image = ImageCreateFromPNG("counter.png");

  $color1 = imagecolorallocate($image, 192, 192, 192);
  $color2 = imagecolorallocate($image, 255, 255, 255);
  $color3 = imagecolorallocate($image, 0, 0, 0);

  ImageString($image,1,0,2, addSpace(normal_numeric("$hits_all")),$color1);
  ImageString($image,1,0,12, addSpace(normal_numeric("$hits")),$color2);
  ImageString($image,1,0,21, addSpace(normal_numeric("$host")),$color2);
  ImagePNG($image);
?>


для запуска счетчика нужна картинка .png и код

Код

<script>
document.write("<img src='http://www.opred.ru/counter.php?w="+  screen.width + "&h=" + screen.height + "' border='0' width='88' height='31'>");
</script>





Вопрос1: совсем непонятны строки - в мануале их нашел, но ничего не дало мне это... Простыми словами можно объяснить?
Код

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
  header("Cache-Control: no-store, no-cache, must-revalidate");
  header("Cache-Control: post-check=0, pre-check=0", false);
  header("Pragma: no-cache");
  header("Content-type: image/png".chr(10).chr(10)); 
 что такое header я прочитал и пользовался им, примерно знаю его назначение, но что за параметры в скобках? Я убирал этот код и тестировал на локальном сервере - вроде все работает и без него... 

Вопрос 2: Не могу понять - что именно передает переменная:
Код

  $screen = "{$_GET[w]}x{$_GET[h]}"; высоту и ширину чего? Экрана что ли?




Это сообщение отредактировал(а) Teleport - 4.10.2008, 22:03


--------------------
user posted image
user posted image 
PM MAIL   Вверх
SelenIT
Дата 4.10.2008, 22:12 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



1) Первые 5 строк - это запрет кеширования (чтобы счетчик каждый раз загружался с сервера, а не из кеша), кроссбраузерный вариант (включает как заголовки HTTP 1.1, так и устаревший заголовок HTTP 1.0 - для совместимости). Последняя строка сообщает браузеру, что то, что идет дальше - тело именно PNG-картинки, а не HTML-странички или чего-то другого. Подробности - в мануале по ф-ции header, а вообще про заголовки неплохо описано здесь.
2) Именно экрана. Поэтому значения этих переменных и подставляются с помощью Javascript - без этого, сам по себе, браузер никак не сообщает эту инфу серверу...

Это сообщение отредактировал(а) SelenIT - 4.10.2008, 22:14


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
bars80080
Дата 4.10.2008, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



а вот сакраментальный вопрос. если счётчик делаешь ты сам себе, зачем выдавать его ввиде картинки. почему не просто сообщение в рамочке на фоне стандартного рисунка? или что пооригинальней?
какая вообще цель в выдаче рисунка?
PM MAIL WWW   Вверх
Teleport
Дата 4.10.2008, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 5.7.2008
Где: Прибалтика

Репутация: нет
Всего: 6



SelenIT - Спасибо, очень хороший ответ. Благодарю smile
bars80080 - а это первый счетчик, который я нашел и он мне понравился - так как использует mysql. Просто рисунок еще не убирал.  Я  уберу его.  smile

Вывод хочу сделать ввиде таблички. Где будут указаны какого числа, с какого ip  сколько раз заходили smile
Вобщем, думаю, вопрос решен. Объяснения были предельно ясны. Спасибо.  smile 


--------------------
user posted image
user posted image 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

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

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1789 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.