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

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Помогите найти ошибку в коде. Модуль статистики. 
:(
    Опции темы
pmy
Дата 15.4.2008, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите разобраться!

Написал модуль сбора и вывода информации о посещениях сайта. Но периодически(!!!) модуль (точнее одна из частей) выводит неправдоподобную информацию. Помогите разобраться.

Для реализации той части модуля, которая периодически работает неправильно smile  использую PHP, MySQL, механизм COOKIE.

Алгоритм очень простой.

Если пользователь, зашедший на сайт, ранее не был на нем (т.е. на его машине нет куки), я сохраняю на его машине 2 переменные куки: date и count. В переменной date хранится текущая дата в формате dd-mm-yy, а в переменной count кол-во просмотров страниц сайта у данного пользователя. ИСХОДЯ ИЗ ЭТОГО - в базе данных увеличиваю на 1  общее кол-во посетителей и кол-во новых (ранее не заходивших на сайт посетителей).

Если пользователь зашел на сайт и у него есть куки, я проверяю их значения. Если значение переменной date совпадает с текущей датой, то в базе данных общее кол-во посетителей за сегодняшний день и кол-во новых посетителей остаётся без изменений. 
Если значение переменной date не совпадает с текущей датой- значит сегодня этого посетителя на сайте ещё не было. Соответственно в базе данных общее кол-во посетителей за сегодняшний день увеличиваем на 1, а кол-во новых посетителей оставляем без изменений. Значение переменной date меняем на текущую дату. 

В чем ошибка:
Модуль статистики на сайте я запустил сегодня. При помощи phpmyadmin я смотрю содержимое таблицы базы данных. И вижу: общее кол-во посетителей 25, кол-во новых посетителей тоже 25. Обновляю страницу и через несколько секунд значения уже 79 и 79 соответственно.  Хотя я знаю, что такого кол-ва посетителей не было (есть ещё другой источник статистики) за этот промежуток времени.  Перепроверял свой код- ну не может мой код добавлять в базу данных такую информацию. Или может я чего не вижу и не допонимаю. И ЧТО САМОЕ ИНТЕРЕСНОЕ!!!!!!!!! После этого, спустя некоторое время, информация меналась достаточно правдоподобно и соответствовала действительности. Т.е. ошибка видимо имеет периодический характер.

P.S. сайт лежит на сервере организации. Т.е. свой хостинг. К базе данных доступ есть у сисадмина... но это может и не важно smile 

Запись в таблице базы данных имеет следующий вид:

**********************
id (например 1)
day (например 15)
month (например 04)
year (например 08)
kol_pos (например 21)
kol_newpos (например 7)
**********************

Вот код этой части модуля, в которой происходит "анализ" куки и запись информации в базу данных:

Код

         $day = date('d');
         $month = date('m');
         $year = date('y');

         $str = $day."-".$month."-".$year;

         @$count = $_COOKIE['count'];
         @$date = $_COOKIE['date'];

         // если куки есть
         if (isSet($count) and isSet($date))
         {
             $k_np = 0; // кол-во новых посетителей. значение этой переменной будет прибавляться к кол-ву новых посетителей

             //echo $date;
             // если посетитель сегодня на сайте был
             if ($date == $str)
             {
                 $k_p = 0; //кол-во посетителей
             }
             // если не был
             else
             {
                 $k_p = 1;
                 $date = $str; // новое значение даты последниего прихода на сайт
             }

             $count = $count + 1; // увеличиваем кол-во посещений у посетителя
         }
         // если куки нет
         else
         {
             // если куки нет, значет посетитель зашёл на сайт первый раз- т.е. увеличиваем на 1 и кол-во посетителей и кол-во новых посети.
             $k_np = 1;

             $k_p = 1;

             $count = 1; // устанавливаем кол-во посещений
             $date = $str; // дата последниего прихода на сайт
         }

         // устанавливаем куки
         setcookie("count", $count, 0x7FFFFFFF);
         setcookie("date", $date, 0x7FFFFFFF);

         // проверяем, есть ли в базе данных запись с сегодняшней датой
         $zapros = "select id, kol_pos, kol_newpos from stat_a where day = '".$day."' and month = '".$month."' and year = '".$year."';";
         $result_1 = mysqli_query($this -> link, $zapros);

         // если такая запись есть
         if ($row_1 = mysqli_fetch_row($result_1))
         {
             // обновляем информацию в этой таблице- увеличиваем кол-во посетителей и кол-во новых посетителей
             $kol_pos = $row_1[1] + $k_p;
             //echo $k_np;
             $kol_newpos = $row_1[2] + $k_np;

                $zapros = "update stat_a SET kol_pos = '".$kol_pos."', kol_newpos = '".$kol_newpos."' where id = '".$row_1[0]."';";
         }
         // если записи нет, то добавляем новую запись в таблицу базы данных
         else
         {
             $zapros = "insert into stat_a(day, month, year, kol_pos, kol_newpos) values('".$day."', '".$month."', '".$year."', '1', '".$k_np."');";
         }

         $result_2 = mysqli_query($this -> link, $zapros);



PM MAIL   Вверх
Feldmarschall
Дата 15.4.2008, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



поисковые роботы.
при чем здесь код?
PM   Вверх
admhome
Дата 15.4.2008, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 10.7.2006
Где: заМКАДье

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



может просто мускул через определённый промежуток времени записывает данные из памяти на хард, и поэтому только через какое-то время информация обновляется
PM MAIL WWW ICQ   Вверх
Feldmarschall
Дата 15.4.2008, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



admhome, у тебя несколько анекдотичные представления о работе баз данных
PM   Вверх
Fortop
Дата 15.4.2008, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

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



admhome, добавляй в базу еще немного информации о пришедшем пользователе. Тогда тебе будет понятнее, кто и откуда накрутил счетчик.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
pmy
Дата 16.4.2008, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Так.
Сегодня посмотрел статистику и сделал вывод - робот ходил. А так как куки он не принимает, поэтому и такое большое smile  кол-во "посетителей". Соответственно теперь стоит задача "вычислить" робота. 
Я думаю вставлю в код блок небольшой, в котором вычисляется робот это или нет и устанавливается соответствующий флаг, а далее запросы к базе данных будут выполняться или не выполняться в зависимости от флага.

Только вопрос по каким пар-рам или данным можно определить, робот это или нет. Можно ли по IP узнать?

Это сообщение отредактировал(а) pmy - 16.4.2008, 08:40
PM MAIL   Вверх
Feldmarschall
Дата 16.4.2008, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



большинство роботов можно отличить по user agent-у
у тебя есть два пути - поискать в интернете список.
либо составить самостоятельно. для этого писать в лог все встретившиеся агенты, и руками их просматривать.
выделять то, что явно робот, находить в нем ключевую строку (к примеру yandex или yahoo) И добавлять в список проверки.

а по поводу твоего первого вопроса... понимаешь, не ищут так ошибки в коде - вываливая его на форум.
это и бессмысленно и невозможно. 
ошибки ищут путем отладки. А для отладки нужно две вещи, которых по определению не может быть на форуме:
1. Та же самая система, на которой код работает неправильно.
2. Понимание того, что этот код делает. Построчно. 
Ничего этого у посетителей форума нет и быть не может.

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

Добавлено через 2 минуты и 41 секунду
Кстати, именно по этой причине использовать куки для определения посетителей нельзя. Используй IP адрес. 
Так у тебя статистика станет гораздо ближе к реальности, даже с роботами.
PM   Вверх
pmy
Дата 16.4.2008, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я отлаживал и построчно просматривал код. Ошибки быть не могло. Поэтому и залез на форум - ну мало ли что. Сегодня выяснил, что действительно робот заходит на сайт. При чем он просмотрел сегодня порядка 90 страниц сайта. Теперь при помощи $_SERVER[юзер агент] вычислю роботов. А по поводу того, что нужно по IP учитывать посетителей- не согласен. Раньше учитывал, но теперь решил куками учитывать. Потому что я дома включаю компьютер и захожу на сайт - у меня один IP. Выключаю и снова включаю - IP уже другой. Захожу на сайт - и получается, что зашло 2 разных посетителя. Поэтому куки. Они конечно могут быть отключены, но всё же статистика поточнее получается.
PM MAIL   Вверх
Feldmarschall
Дата 16.4.2008, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Цитата(pmy @  16.4.2008,  10:31 Найти цитируемый пост)
Я отлаживал

хехех.
неважно, что ты делал.
важно какой результат получил.
это в школе можно сказать занудной директрисе - "я учил!". Это ведь ей нужны твои знания, правда?
а во взорослой жизни можно сколько угодно говорить "я учил", "я отлаживал", "я искал", но проблема в том, что результат нужен не какой-то тёте, а самому себе.

Цитата(pmy @  16.4.2008,  10:31 Найти цитируемый пост)
и построчно просматривал код

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

Цитата(pmy @  16.4.2008,  10:31 Найти цитируемый пост)
А по поводу того, что нужно по IP учитывать посетителей- не согласен. Раньше учитывал, но теперь решил куками учитывать. Потому что я дома включаю компьютер и захожу на сайт - у меня один IP. Выключаю и снова включаю - IP уже другой. Захожу на сайт - и получается, что зашло 2 разных посетителя. Поэтому куки. Они конечно могут быть отключены, но всё же статистика поточнее получается. 

И здесь у тебя все наперекосяк.

Своими глазами видишь реальный факт: с куками точность вообще никакая! Но утверждаешь, будто оно лучше. Кто тебе сказал, что лучше? Один посетитель с отключенными куками загадит тебе всю статистику. В то время, как количество хостов, как нетрудно убедиться, не отличается больше, на 5-10% от количества "посетителей" в "других источниках статистики". И алгоритмы, которые там используются - далеко не такие простые, как ты думал - поставил куку, и все посчитал!
Учитывая же, что точность таких систем тоже колеблется в тех же пределах, то и вовсе говорить не о чем.

Пока ты не очень хорошо понимаешь механизм работы веб-сервера - считай IP адреса. Да и когда будешь хорошо разбираться - тоже не будет смысла считать другое.
PM   Вверх
Feldmarschall
Дата 16.4.2008, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Пример, который я уже устал приводить
скроллим страницу вниз.
видим счетчик mail.ru
кликаем по нему.
смотрим строчку 
4.  Форум программистов Vingrad (международный) 
поднимаем глаза к названиям колонок:
Посетителей: 7,144
Хостов: 7,142
получаем разницу, делим её на одну из цифр и умножаем на сто: 0,028. три десятых процента. разницы между хостами и 
посетителями. 
Ну ладно, такой момент попался. разница в 2 единицы. но посмотрим другие сайты рядом. Ну - сотня на несколько тыщ. Полтора процента. 
Судя по этим цифрам, в реальной жизни пользователи интернета видимо занимаются еще чем-то, кроме ежесекундного выдергивания провода из модема.


PM   Вверх
pmy
Дата 16.4.2008, 14:04 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Feldmarschall @ 16.4.2008,  10:50)
хехех.
неважно, что ты делал.
важно какой результат получил.

А я и получил результат. Теперь статистика работает более-менее корректно. В дополнение мой модуль статистики показывает топ20 самых просматриваемых страниц и ещё полезную информацию. Гараздо удобнее чем мэиловские счетчики.

p.s.
Вы, уважаемый, любите разводить диалоги ни о чем. При чем тут школа и учителя? smile  smile 
PM MAIL   Вверх
Fortop
Дата 16.4.2008, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

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



Цитата(pmy @  16.4.2008,  14:04 Найти цитируемый пост)
Вы, уважаемый, любите разводить диалоги ни о чем. При чем тут школа и учителя?

При том что Вас не устраивал "результат" и Вы обратились за помощью.
Когда указали на Ваши ошибки - пошел детский лепет в виде оправданий. 
Ваши оправдания я получил результат и это работает - тут никому не нужны это не школа.
Сделав счетчик с предпосылкой "лишь бы был результат" и не понимая как и почему оно работает - Вы сами себя наказываете.



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
pmy
Дата 16.4.2008, 15:29 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Fortop @ 16.4.2008,  14:46)
При том что Вас не устраивал "результат" и Вы обратились за помощью.
Когда указали на Ваши ошибки - пошел детский лепет в виде оправданий. 
Ваши оправдания я получил результат и это работает - тут никому не нужны это не школа.
Сделав счетчик с предпосылкой "лишь бы был результат" и не понимая как и почему оно работает - Вы сами себя наказываете.

Кто нашел хоть одну ошибку?
Оправданий нет никаких! Не Вы мне ставили задачу и не за что мне перед вами оправдываться. Ваш вывод - "лишь бы был результат" необоснован. Тогда о чем Вы? И вобще в предыдущем сообщении я обращался не к вам. Так что - молчим...  smile 

Это сообщение отредактировал(а) pmy - 16.4.2008, 15:32
PM MAIL   Вверх
Feldmarschall
Дата 16.4.2008, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



pmy, я думаю, что ты не модератор этого форума.
Так что не надо никому затыкать рот.

Никакого результата ты не получил. 
Ты пришел на форум, где тебе результат принесли на блюдечке с голубой каемочкой.
Это если говорить о твоей ошибке.

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

И если ты не понял, о чем говорят уважаемые люди, то не стоит это афишировать ;-)

PM   Вверх
pmy
Дата 16.4.2008, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всё понял. Уважааааааааемые люди! smile  smile  smile  smile  smile  smile  smile  smile  smile  smile  smile 
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.1331 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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