За последние 24 часа нас посетили 22450 программистов и 997 роботов. Сейчас ищут 633 программиста ...

Сколько пользователь находится на сайте

Тема в разделе "PHP для новичков", создана пользователем Владимир11, 26 дек 2018.

  1. Владимир11

    Владимир11 Активный пользователь

    С нами с:
    20 май 2018
    Сообщения:
    140
    Симпатии:
    0
    upload_2018-12-26_0-35-35.png

    вот функция

    PHP:
    1. function time_left($tl)
    2. {
    3. $d=3600*24;
    4. $day=floor($tl/$d);
    5. $tl=$tl-($d*$day);
    6.  
    7. $hour=floor($tl/3600);
    8. $tl=$tl-(3600*$hour);
    9.  
    10. $minute=floor($tl/60);
    11. $tl=$tl-(60*$minute);
    12.  
    13. $second=floor($tl);
    14.  
    15. $dayt="".($day>0?"$day д. ":null)."";
    16. $hourt="".($hour>0?"$hour ч. ":null)."";
    17. $minutet="".($minute>0?"$minute м. ":null)."";
    18. $secondt="".($second>0?"$second с. ":null)."";
    19. if($day>0)
    20. {
    21. $minutet=NULL;
    22. $secondt=NULL;
    23. }
    24. if($hour>0 && $day==0)
    25. {
    26. $secondt=NULL;
    27. $dayt=NULL;
    28. }
    29. return "$dayt$hourt$minutet$secondt";
    30. }

    PHP:
    1. echo "<li><img src='images/icons/chasi.gif'> Время онлайн: <span class='title'>".time_left($ank['time'])."</span></li>";


    Подскажите как сделать что б работало на другом скрипте а именно как реализовать запись в бд
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    time_left() только форматирует. Записывай каждую активность пользователя просто
     
  3. Владимир11

    Владимир11 Активный пользователь

    С нами с:
    20 май 2018
    Сообщения:
    140
    Симпатии:
    0
    подскажи
     
  4. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Как вариант отсылайте от клиента постоянно аякс запросы, каждые 3-5 секунд. Записывайте во время каждого запроса, в таблицу с пользователем тек дату и время в юникс формате.
    И когда проверяете кол-во активных пользователей сравниваете его дату активности с текущем временем за минусом например 10-15 секунд. Ну и собственно всё.
     
  5. Владимир11

    Владимир11 Активный пользователь

    С нами с:
    20 май 2018
    Сообщения:
    140
    Симпатии:
    0
    нагрузка на серв будет колоссальная если к примеру 200 чел каждые 3-5 сек
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    1. Делаешь у таблицы пользователей два поля: firstQueryTime, lastQueryTime
    2. При каждом запросе проверяешь: если у пользователя firstQueryTime ещё не записан, пишешь туда время запроса. Если уже записан, пишешь в lastQueryTime
    3. Таким образом lastQueryTime - firstQueryTime = время на сайте online
    4. На крон вешаешь скрипт, который обнуляет оба поля для всех пользователей, которые не запрашивали страницы сайта, ну, к примеру, минут 10, считаешь, что они значит ушли с сайта.
    Код за тебя писать не буду.
     
  7. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    в соседнем топике писали про Redis, возможно он как вариант?
     
  8. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Ухахаха

    Не будет там никакой нагрузки. Этот запрос как капля в море для веб сервера.
     
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Не нужно фиксировать каждое обращение. Обычно покидание пользователем ресурса фиксируется с большой погрешностью, например 5 мин, а фиксация выполняется к примеру только в последние 4 мин, после кот. дается передышка на 1 мин.