Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Рейтинговая система (подскажите!)
 
 автор: Евгений Петров   (08.08.2005 в 01:16)   письмо автору
 
 

Итак. Есть рейтинговая система. При регистрации пользователь получает код счетчика (на JavaScript) в виде картинки. Картинка генерируется средствами php и на ней соответственно отображается текстовая информация (хиты, хосты и т.д.). Но вот проблема как эти цыфры получить?
Я пока нашел два способа:
1) Создаем таблицу, в которой регистрируем все заходы неких пользователей на сайт. Считаем в этой таблице количество записей удовлетворяющих некоторому условию и в итоге у нас получается нужная нам информация.
Теперь проблема! - Это рейтинговая система и если 1000 пользователей поставят у себя такие счетчики, то не "разорвется" ли хостинг (или по крайней мере база данных) на котором будет располагаться рейтинговая система???

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

Может есть ещё какие нибудь способы по решению данной проблемы?
Заранее спасибо!!!

   
 
 автор: cheops   (08.08.2005 в 11:47)   письмо автору
 
   для: Евгений Петров   (08.08.2005 в 01:16)
 

1)
>и если 1000 пользователей поставят у себя такие счетчики, то не "разорвется" ли
> хостинг
Вполне может быть - обычно под такие системы используют выделенный сервер, а очень крупные системы используют кластеры. Но в начале когда у вас не много посетителей будет можно поиспытывать терпение хостеров :)))

2) А вы как увеличиваете значение поля? Можно посмотреть SQL-запросы, осуществляющие эту операцию... Вообще там таких проблем не должно быть и извлекать данные для увеличения счётчика вовсе не обязательно...

   
 
 автор: Евгений Петров   (08.08.2005 в 12:26)   письмо автору
 
   для: cheops   (08.08.2005 в 11:47)
 

Как такогого запроса пока нет, потому что я ещё не знаю как делать (по всей видимости 2-й вариант по лучше будет).
>>... и извлекать данные для увеличения счётчика вовсе не обязательно...
А как это сделать если не секрет?

   
 
 автор: cheops   (08.08.2005 в 12:35)   письмо автору
 
   для: Евгений Петров   (08.08.2005 в 12:26)
 

Для этого обычно прибегают к оператору UPDATE
UPDATE tbl SET counter = counter + 1 WHERE ...

   
 
 автор: Евгений Петров   (08.08.2005 в 13:03)   письмо автору
 
   для: cheops   (08.08.2005 в 12:35)
 

Ой вот это я прогнал. :) Че то я не подумал об этом. И все таки насколько второй вариант "легче" для хостинга чем первый?

   
 
 автор: cheops   (08.08.2005 в 13:16)   письмо автору
 
   для: Евгений Петров   (08.08.2005 в 13:03)
 

Под первым вариантом подразумевается извлечение, увеличение и помещение обратно? В два раза больше запросов и примерно в три раза больше вычислений.

   
 
 автор: Евгений Петров   (08.08.2005 в 13:18)   письмо автору
 
   для: cheops   (08.08.2005 в 13:16)
 

Нет первый вариант это в первом посте после 1)

   
 
 автор: cheops   (08.08.2005 в 13:24)   письмо автору
 
   для: Евгений Петров   (08.08.2005 в 13:18)
 

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

   
 
 автор: Евгений Петров   (08.08.2005 в 13:27)   письмо автору
 
   для: cheops   (08.08.2005 в 13:24)
 

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

   
 
 автор: cheops   (08.08.2005 в 13:34)   письмо автору
 
   для: Евгений Петров   (08.08.2005 в 13:27)
 

Да можно, но объём базы данных сильно может возрасти - за три месяца статистики SoftTime, базы данных PowerCounter разрастаются свыше 100 Мб (без учёта reffer-ов), а это ещё не самый посещаемый ресурс.

   
 
 автор: Евгений Петров   (08.08.2005 в 19:26)   письмо автору
 
   для: cheops   (08.08.2005 в 13:34)
 

А разве в первом варианте такого не произойдет?

   
 
 автор: cheops   (09.08.2005 в 01:01)   письмо автору
 
   для: Евгений Петров   (08.08.2005 в 19:26)
 

Ну я его и имел ввиду :)))

   
 
 автор: Евгений Петров   (09.08.2005 в 12:23)   письмо автору
 
   для: cheops   (09.08.2005 в 01:01)
 

А если каждый день удалять данные которым больше месяца например а результаты предварительно сохранять?

   
 
 автор: cheops   (09.08.2005 в 12:50)   письмо автору
 
   для: Евгений Петров   (09.08.2005 в 12:23)
 

Да обычно так и делают, но некоторые сайты и за месяц могут давать огромную статистику, вряд ли они конечно позарятся на нераскрученный счётчик, но это не исключено... Если знаете примерную посещаемость своих клиентов, можно оценить объёмы в PowerCounter 2 000 000 хитов - это где-то 100 Мб.

   
 
 автор: Евгений Петров   (09.08.2005 в 12:54)   письмо автору
 
   для: cheops   (09.08.2005 в 12:50)
 

Я вчера примерно прикидывал и понял что надо место экономить.

   
 
 автор: Евгений Петров   (09.08.2005 в 12:56)   письмо автору
 
   для: Евгений Петров   (09.08.2005 в 12:54)
 

У меня теперь другая проблемма как отследить хиты. Ведь данные передаются через JS и надо как то знать что этот пользователь тут уже был.

   
 
 автор: cheops   (09.08.2005 в 13:03)   письмо автору
 
   для: Евгений Петров   (09.08.2005 в 12:56)
 

Посадите ему сессионную cookie - это общераспространённая тактика.

   
 
 автор: Евгений Петров   (09.08.2005 в 13:09)   письмо автору
 
   для: cheops   (09.08.2005 в 13:03)
 

Но ведь куки не у всех вкоючены и потом ведь все таки как то можно определить ip. Я тут вот что нашел. Посмотрите тут: http://www.directrix.ru/cgi-bin/stat/info.cgi?day1=09&day2=09&month1=08&month2=08&year1=05&year2=05&id=39537&user=guest&type=ip
откуда он их берет. Код счетчика примерно такой:

<a
href='http://www.directrix.ru/?sid=46918' target=_top><script
language="javascript">
dirx_js="1.0";
dirx_r=""+Math.random()+"&id=46918&cnt=28220&ref="+escape(document.referrer)+"&page="+escape(window.location.href);
document.cookie="dirx=1; path=/";
dirx_r+="&ck="+(document.cookie?"Y":"N");
</script>
<script language="javascript1.1">
dirx_js="1.1";
dirx_r+="&j="+(navigator.javaEnabled()?"Y":"N")
</script>
<script language="javascript1.2">
dirx_js="1.2";
dirx_r+="&w="+screen.width+'&h='+screen.height+"&col="+(((navigator.appName.substring(0,3)=="Mic"))?screen.colorDepth:screen.pixelDepth)
</script>
<script language="javascript1.3">dirx_js="1.3"</script>
<script language="javascript">
dirx_r+="&js="+dirx_js;
document.write("<img "+"
src='http://www.directrix.ru/cgi-bin/counter/counter.cgi?"+dirx_r+"'
border=0 width=88 height=31 alt='Directrix.ru - рейтинг, каталог
сайтов'></a>")
</script>
<noscript>
<img
src="http://www.directrix.ru/cgi-bin/counter/counter.cgi?id=46918&cnt=28220"
border=0 width="88" height="31" alt='Directrix.ru - рейтинг, каталог
сайтов'></noscript>
<img src="http://www.directrix.ru/images/empty.gif" border=0
width="0" height="0" alt='Directrix.ru - рейтинг, каталог
сайтов'></a>

   
 
 автор: Евгений Петров   (09.08.2005 в 14:07)   письмо автору
 
   для: Евгений Петров   (09.08.2005 в 13:09)
 

Я тут где то нарыл, что можно перенаправить пользователя на php скрипт там определить его ip и потом отправить его назад. Плиз помогите мне такое сделать. Век жизни благодарен буду.

   
 
 автор: cheops   (09.08.2005 в 16:28)   письмо автору
 
   для: Евгений Петров   (09.08.2005 в 14:07)
 

А разве нельзя определить IP-адрес в скрипт-картинке счётчика - ведь пользователь его загружает и должен оставлять свой IP-адрес - зачем его гонять туда-сюда. Вон внизу форума гроздь счётчиков висит - в работу сайта не вмешивается, однако своё дело делает.

   
 
 автор: Евгений Петров   (09.08.2005 в 16:56)   письмо автору
 
   для: cheops   (09.08.2005 в 16:28)
 

Да можно, сори я не проверил сначала. У меня другая проблема как можно вычислить разницу между двумя датами (желательно в секундах) в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС?

   
 
 автор: cheops   (09.08.2005 в 17:08)   письмо автору
 
   для: Евгений Петров   (09.08.2005 в 16:56)
 

Давайте в отдельной теме :) Это ведь в MySQL вычислить нужно?

   
 
 автор: Евгений Петров   (09.08.2005 в 18:37)   письмо автору
 
   для: cheops   (09.08.2005 в 17:08)
 

Вообще нет, но я уже разобрался (использовал функцию mktime). Все равно спасибо. Вот только вопрос есть ли функция обратная mktime?

   
 
 автор: cheops   (09.08.2005 в 21:08)   письмо автору
 
   для: Евгений Петров   (09.08.2005 в 18:37)
 

Да, для форматирования даты в секундах от полуночи 1 января 1970 года используется функция date() - она может принимать второй необязательный параметр для передачи ей даты. Без этого параметра она форматирует текущую дату.

   
 
 автор: Евгений Петров   (09.08.2005 в 21:12)   письмо автору
 
   для: cheops   (09.08.2005 в 21:08)
 

Спасибо!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования