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

Поиск:

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


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

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



Как сделать три счётчика статисики для вывода на сайте: downloads (на один файл), today visitors, total visitors? Интересует, как именно считать и хранить.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
oksale
Дата 13.3.2006, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Это должно помочь.
--------------------
WBR, oksale
PM MAIL ICQ   Вверх
R.M.
Дата 13.3.2006, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Анархист
****


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

Репутация: -2
Всего: 30



Цитата(cully @ 13.3.2006, 15:58 Найти цитируемый пост)
downloads

Делай ссылку не на файл а на скрипт который добавит запись в базу и потом перенаправит или запустит сам файл

Цитата(cully @ 13.3.2006, 15:58 Найти цитируемый пост)
today visitors

Всех людей пришедших заносиш в базу и выводиш mysql_num_rows только тех у которых дата H:i:s или как ты там храниш дату

Цитата(cully @ 13.3.2006, 15:58 Найти цитируемый пост)
total visitors

Как в предыдущем только вывод mysql_num_rows всех


--------------------
Помнишь как бодрили дискотеки прошлого века? Теперь стул, компьютер и нету человека.

Nokia LifeStyle - Всё для смартфонов Nokia 
PM MAIL WWW ICQ   Вверх
stab
Дата 13.3.2006, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

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



Слишком сложно, по сути надо хранить всего три значения, а считать видима так:

* downloads - скрипт увеличивает на еденичку счётчик, потом редирект.
* today visitors - кидать куку с датой, если её нет или дата не сегодняшняя, то увеличить счётчик на единицу. раз в сутки сброс в ноль.
* total visitors - каждый раз увеличивать на единицу при увеличении today visitors.

Через куки не очень надежно, но точности особой не надо. Основной вопрос как хранить. Я совсем чайник в скриптовых делах.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
stab
Дата 13.3.2006, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

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



Может просто в файле? но тогда как себя поведёт этот файл, если паралельно несколько запросов буду выполняться?


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
клоп
Дата 13.3.2006, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(cully @ 13.3.2006, 17:19)
Может просто в файле? но тогда как себя поведёт этот файл, если паралельно несколько запросов буду выполняться?

Он просто обнулиться. Используй блокировку.
--------------------
Всякая чепуха посещает голову, когда она пуста ....
PM MAIL WWW   Вверх
stab
Дата 13.3.2006, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

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



Цитата(клоп @ 13.3.2006, 21:24 Найти цитируемый пост)
Используй блокировку.


а вот с этого места подробнее, пожалуйста smile



--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
R.M.
Дата 13.3.2006, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Анархист
****


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

Репутация: -2
Всего: 30



cully, я бы даже не заморачивался с файлами, кликни мне в подпись, внизу увидиш статистику на БД


--------------------
Помнишь как бодрили дискотеки прошлого века? Теперь стул, компьютер и нету человека.

Nokia LifeStyle - Всё для смартфонов Nokia 
PM MAIL WWW ICQ   Вверх
клоп
Дата 14.3.2006, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(cully @ 13.3.2006, 17:33)
Цитата(клоп @  13.3.2006,  21:24 Найти цитируемый пост)
Используй блокировку.


а вот с этого места подробнее, пожалуйста smile

Код

<?php

$fp = fopen("count.txt", "w+");// count.txt - твой файл

if (flock($fp, LOCK_EX)) { // выполнить эксплюзивное запирание
   fwrite($fp, "Что-нибудь пишем\n");
   flock($fp, LOCK_UN); // отпираем файл
} else {
   echo "Не могу запереть файл !";
}

fclose($fp);

?> 

--------------------
Всякая чепуха посещает голову, когда она пуста ....
PM MAIL WWW   Вверх
stab
Дата 14.3.2006, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

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



Мне тут предложили оригинальное решение, спешу поделиться. Запись байта в файл - атомарная операция, ни каких локов не надо. Заводим три файла: downloads.ctr, today-visitors.ctr, total-visitors.ctr. Когда надо дописываем по байту, размер каждого из файлов и есть нужное нам значение.

А как записать один байт? smile fwrite($fp, "1")? или это два будет?


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Guedda
Дата 14.3.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


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

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



Каждый символ - это один байт.


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
stab
Дата 14.3.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

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



Ясна, спасиба, я насчёт нуля думал на конце. Я же десктопный программер. smile


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
клоп
Дата 14.3.2006, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я сам если честно запарился с текстовыми счетчиками. В электронной газете предприятия где я тружусь, в день выпуска номера в онлайне бывает 150-200 чел одновременно, блокировка не помогает. Минимум 1-2 раза в неделю счетчик прочтения статьи обнуляется. Незнаю что и делать. Воn код, мож кто что подскажет как еще избегать обнуления?
Код

$article_counter = file("$path/data/counter.txt");
$article_counteradd = @fopen("$path/data/counter.txt", w);
flock($article_counteradd, LOCK_EX);
foreach ($article_counter as $counter_line)
{
 $count_arr = explode("|", $counter_line);
 if ($count_arr[0] != $news_arr[0])
 {
 
   fwrite($article_counteradd, $counter_line);

 }
 else
 {
   $foundcount = 1;
   $count=$count_arr[1];
   $count++;
  
   fwrite ($article_counteradd, "$count_arr[0]|$count|\n");
 
 }
}
if ($foundcount != 1)
{
 $foundcount = 1;
 
 fwrite ($article_counteradd, "$news_arr[0]|1|\n");
 
}
 flock($article_counteradd, LOCK_UN); 
fclose ($article_counteradd);


где: $news_arr[0] - TIMESTAMP статьи
--------------------
Всякая чепуха посещает голову, когда она пуста ....
PM MAIL WWW   Вверх
Guedda
Дата 14.3.2006, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


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

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



А что, базы данных не устраивают? При таком количестве посещений необходимо, я думаю, использовать БД...


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
клоп
Дата 14.3.2006, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Guedda @ 14.3.2006, 17:40)
А что, базы данных не устраивают? При таком количестве посещений необходимо, я думаю, использовать БД...

Базы устраивают, просто когда все начиналось год назад то совсем не предполагалось такого количества в онлайне. Текстовые файлы справлялись с нагрузкой. А с другой стороны разве законы записи в БД сильно отличаются? Там (см. код выше) веть тоже используется примерно такая же блокировка когда обрабатывается один процесс из многих а другие ждут. Реально ли как то более стабилизировать или ужесточить это в моем примере? Там по идее на запись имеет право только один процесс (при LOCK_EX) а остальные в это время только читать могут. Конечно я понимаю что сброс происходит когда одновременно, секунда в секунду, к файлу на запись попадает два или более процесса, и что секунда это слишком большая величина при такой нагрузке.....
Есть мысль как-то прикрутить microtime() к timestamp, но как пока мне не ясно. Может кто еще что предложит помимо перехода на БД или разовьет на примере мою мысль? Буду презнателен.
--------------------
Всякая чепуха посещает голову, когда она пуста ....
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1150 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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