Кто сейчас на сайте

Тема в разделе "PHP программирование", создана пользователем Kauperwood, 2 фев 2011.

  1. Kauperwood

    Kauperwood Гость

    Недавно лазил в поисках чего то интересного на мой взгяд и наткнулся на простенький счетчик онлайна посетителей на сайте.
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">who_online.php</div></div><div class="sp-body"><div class="sp-content">
    Код (PHP):
    <?php
    session_save_path("");
    session_start();

    function getUsersOnline() {
    $count = 0;

    $handle = opendir(session_save_path());
    if ($handle == false) return -1;

    while (($file = readdir($handle)) != false) {
    if (ereg("^sess", $file)) $count++;
    }
    closedir($handle);

    return $count;
    }
    ?>
    Выложил его, - да он показывает когда кто то на сайте, но вот не могу понять почему он не сбрасывает счетчик, когда кто то покидает сайт, цифра может только увеличиваться.. в чем тут проблема?
     
  2. 1ive

    1ive Well-Known Member
    Web Team

    Регистрация:
    12 сен 2010
    Сообщения:
    694
    Симпатии:
    0
    Это скорее счетчик посещений.
    Судя по коду, он и не предусматривает уменшение значений при выходе пользователя.

    Такой, думаю, пойдет лучше:

    Код (PHP):
    session_id("codeby.net");
    session_start();
    $time=5;
    $f=1;
    if(!isset($_SESSION['usession']))  
    $_SESSION['usession']=0;
    if($_SESSION['usession']>0)
    {
    for($i=0;$i<$_SESSION['usession'];$i++)
    if($_SESSION['user']['ip'][$i]==$_SERVER['REMOTE_ADDR'])
    {
    $_SESSION['user']['date'][$i]=date('U');
    $f=0;
    break;
    }
    if($_SESSION['usession']>0)    
    for($i=0;$i<$_SESSION['usession'];$i++)
    if(date('U')-$_SESSION['user']['date'][$i]>$time)
    { for($j=$i;$j<$_SESSION['usession']-1;$j++)
    {
    $_SESSION['user']['date'][$j]=$_SESSION['user']['date'][$j+1];
    $_SESSION['user']['ip'][$j]=$_SESSION['user']['ip'][$j+1];
    }
    $_SESSION['usession']--;
    }
    }
    if($f)
    {
    $_SESSION['user']['ip'][$_SESSION['usession']]=$_SERVER['REMOTE_ADDR'];
    $_SESSION['user']['date'][$_SESSION['usession']]=date('U');
    $_SESSION['usession']++;
    }
    echo "На сайте: ".$_SESSION['usession']."пользователей!";
     
  3. Kauperwood

    Kauperwood Гость

    Не могу сам понять, непонятно, на том сайте написано что именно онлайн на сайте, вот ccылка.
    За Ваш вариант спасибо - вроде то, но я какой то не фартовый на счетчики, или в одну и ту же ситуацию попадаю, не ясно... С Вашим примером у меня выводиться сугубо единица. Может на хостинге в пхп что то включить нужно?

    добавлено позднее: Бедные друзья, приходиться им заходить теперь ко мне сайт чаще :facepalm: Надо будет почитать потом про то как виртуально организовать подобные опыты.
     
  4. 1ive

    1ive Well-Known Member
    Web Team

    Регистрация:
    12 сен 2010
    Сообщения:
    694
    Симпатии:
    0
    Вот код рабочий 100%))

    Код (PHP):
    session_save_path("sessions");
    session_start();
    define("MAX_IDLE_TIME", 3);
    function getOnlineUsers(){

    if ( $directory_handle = opendir( session_save_path() ) ) {
    $count = 0;
    while ( false !== ( $file = readdir( $directory_handle ) ) ) {
    if($file != '.' && $file != '..'){
    if(time()- filemtime(session_save_path() . '/' . $file) < MAX_IDLE_TIME * 60) {
    $count++;
    }
    } }
    closedir($directory_handle);
    return $count;
    } else {return false;}
    }
    echo 'Online: ' . getOnlineUsers() . '<br />';
    В каталоге с файлом нужно будет создать папку "sessions" для хранения сессий.
    Пример: http://1ive.ru/online

    __________2.png
     
Загрузка...

Поделиться этой страницей