Количество просматривающих в данный момент.

nixsoid

Новичок
Количество просматривающих в данный момент.

Как можно на пхп странице поставит счетчик что-бы который бы показывал количество людей просматривающие страницу на данный момент.
 

white phoenix

Новичок
создай MySQL-таблицу со следующими полями:
`ip` - IP пользователя - $_SERVER['REMOTE_ADDR']
`last` - время последнего запроса - time()
и пиши в нее при каждом запросе, а для снятия показаний счетчика делай "SELECT * FROM `table` WHERE `last` > ".time()-60."".
 

moxnatiy

Новичок
nixsoid
никак
читай рфц по http протоколу

можно посмотреть количество людей просмотревших страницу за некий последний промежуток времени
 

SiMM

Новичок
> можно посмотреть количество людей просмотревших людей за некий последний промежуток времени
И то довольно приближённо.
 

N9

Новичок
в сети очень много примеров на эту тему, так что just google it
 

nixsoid

Новичок
Автор оригинала: white phoenix
и пиши в нее при каждом запросе,
А вот как записыват при каждом запросе, как передать переменной значение что был запрос и что-бы он вносил?

-~{}~ 15.12.05 21:11:

Автор оригинала: white phoenix
moxnatiy
естественно :) он просто не так выразился.
А на какие слова иммено искать?

-~{}~ 15.12.05 21:12:

Кажется одного нашёл вот здесь.
http://phpclub.ru/?m=app&s=48
 

Anatolyi

Новичок
Могу тебе прямой пример вставить.
Давненько писал "Who online" с использованием текстовых файлов.
Вот он...


function add_user_stats()
{
global $REMOTE_ADDR;
$time = time();
$ip = $REMOTE_ADDR;
$str = "$ip^$time\n";
$wrf = @fopen("stats.txt", "a");
flock($wrf, 1);
fwrite($wrf, $str);
flock($wrf, 3);
fclose($wrf);
}


function show_stats()
{
$openbase = @file("stats.txt");
$count_base = count($openbase);

//Считаем количество посетителей, разница которых во времени меньше 120 секунд
for($i = 0; $i < $count_base; $i++)
{
$now_time = time();
list($ip,$time) = explode("^", "$openbase[$i]");
$now_time_rel = $now_time - $time;
if($now_time_rel < 120)
{
$k++;
}

return $k;
}

function clear_stats()
{
$openbase = @file("stats.txt");
$count_base = count($openbase);

if($count_base >= 1000)
{
unlink("stats.txt");
touch("stats.txt");
}

}


-----

Это на всякий случай, если не понятно, что с ними делать ;)


add_user_stats(); //Добаляет нового посетителя
print show_stats(); //Отображает количество посетителей on-line
clear_stats(); //Очищает текстовый файл, если он очень большой...
 

Фанат

oncle terrible
Команда форума
nixsoid
у тебя скрипт исполняется при каждом запросе, чудик =)
скрипт запустился - значит запрос!
 

nixsoid

Новичок
Автор оригинала: Anatolyi
Могу тебе прямой пример вставить.
Давненько писал "Who online" с использованием текстовых файлов.
Вот он...


function add_user_stats()
{
global $REMOTE_ADDR;
$time = time();
$ip = $REMOTE_ADDR;
$str = "$ip^$time\n";
$wrf = @fopen("stats.txt", "a");
flock($wrf, 1);
fwrite($wrf, $str);
flock($wrf, 3);
fclose($wrf);
}


function show_stats()
{
$openbase = @file("stats.txt");
$count_base = count($openbase);

//Считаем количество посетителей, разница которых во времени меньше 120 секунд
for($i = 0; $i < $count_base; $i++)
{
$now_time = time();
list($ip,$time) = explode("^", "$openbase[$i]");
$now_time_rel = $now_time - $time;
if($now_time_rel < 120)
{
$k++;
}

return $k;
}

function clear_stats()
{
$openbase = @file("stats.txt");
$count_base = count($openbase);

if($count_base >= 1000)
{
unlink("stats.txt");
touch("stats.txt");
}

}
Поставил ваш код на локалхост и рядом вот с ними текстовой файл stats.txt но пхп страница выдает ошибку:
Parse error: parse error, unexpected $end in c:\program files\apache group\apache\htdocs\online.php on line 46

Но никак не могу найти этот файл.
Помоги плз.
 

kruglov

Новичок
Anatolyi
Вот так оно - готовые решения давать. Отдувайтесь теперь, дебажьте...
 

nixsoid

Новичок
Нет мне уже не пригодился с текстовиком мне нужен с MySQL-ом. Потомучто хостер не открывает на папку доступ 777.
я нашёл один текстовико:
include ("config.php");
<?
if (!$datei) $datei = dirname(__FILE__)."/$filename";
$time = @time();
$ip = $REMOTE_ADDR;
$string = "$ip|$time\n";
$a = fopen("$filename", "a+");
fputs($a, $string);
fclose($a);

$timeout = time()-(60*$timer);

$all = "";
$i = 0;
$datei = file($filename);
for ($num = 0; $num < count($datei); $num++) {
$pieces = explode("|",$datei[$num]);

if ($pieces[1] > $timeout) {
$all .= $pieces[0];
$all .= ",";
}
$i++;
}
$all = substr($all,0,strlen($all)-1);

$arraypieces = explode(",",$all);

$useronline = count(array_flip(array_flip($arraypieces)));

if ($useronline == 0) {
$useronline = 1;
}
echo $useronline;

// L&#246;schen
$dell = "";
for ($numm = 0; $numm < count($datei); $numm++) {
$tiles = explode("|",$datei[$numm]);
if ($tiles[1] > $timeout) {
$dell .= "$tiles[0]|$tiles[1]";
}
}

if (!$datei) $datei = dirname(__FILE__)."/$filename";
$time = @time();
$ip = $REMOTE_ADDR;
$string = "$dell";
$a = fopen("$filename", "w+");
fputs($a, $string);
fclose($a);
?>

Но нет идеи как его поменять на то что-бы он не работал с текстовым файлом а вместо текстовика заносил в базу MySQL?
Вижу выход заменить fopen на INSERT...

-~{}~ 18.12.05 17:37:

Это скрипт как надо работает в локале а вот на хостинге нет пермишина из за этого я должен переконвертировать его на мускул.
 

Anatolyi

Новичок
Ххе, хорошо, что не пригодится текстовик :)... А то я начал дебажить... И там немного косо все написано... Усе, с готовыми решениями я закончил на форуме... ;)

-~{}~ 18.12.05 17:44:

nixsoid
ХХе, найди лучше в интернете скрипт Who online и не парься...
А если тебе надо разобраться именно с технологией и т.д. Тогда давай разбираться....
 

betik

Новичок
Автор оригинала: nixsoid
Нет мне уже не пригодился с текстовиком мне нужен с MySQL-ом.

..вырезано..

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

Фанат

oncle terrible
Команда форума
nixsoid
Скрипт, выводящий оличество пользователей онлайн - очень хорошая практика.
тебе стоит написать его для того, чтобы немного изучить пхп.
Но желать это надо не переделывая другой скрипт, и не сразу всё.
Делать надо самостоятельно и постепенно.

ты умеешь работать с базой?
 

Фанат

oncle terrible
Команда форума
хорошо, тогда объясни - какие принципиальные трудности у тебя возникли при реализации этого примитивного скрипта из трёх запросов?
 

nixsoid

Новичок
Автор оригинала: Фанат
хорошо, тогда объясни - какие принципиальные трудности у тебя возникли при реализации этого примитивного скрипта из трёх запросов?
Всё получилось но вот вопрос где возник:
Скрипт загрузил на хост и на двух компах в локали запускаю тот же самый скрипт в один и тот же время - тогда в мускуле IP пишется только один и это IP шлюза. Но нельзя ли так сделать что-бы IP локальных компов тоже определялось а не как один общий IP шлюза?

-~{}~ 18.12.05 19:24:

То есть вот этот скрипт дает толь IP gateway-a:
<?
$ip = $REMOTE_ADDR;
echo "$ip";
?>

????
 

betik

Новичок
???
Как настроено подключение к интернет в локали?

Если у тебя нет прямого айпишника на каждом из компьютеров, доступного из интернет - то понятное дело ты не сможешь узнать ИП данный тебе dhcp сервером провайдера локальной сети (ну или настроенного вручную, что сомнительно)...

В таком случае пробросом интернета в том или ином поннимании этого слова занимается прокси сервер (в том или ином понимании), а он в принципе может и рассказать кто лезет через него, то есть ИП твоей локалки, хотя с другой стороны может и не рассказать...

Проверь все заголовки, которые ты получаешь на свой сервер, м.б. там есть что-то интересное, но в любом случае - кука юзеру с последним access-time не повредит... Хотя, я вот не принимаю кук в осле, потому как он у меня перестал их принимать сам по себе после лечения антивирусом, но в основном я пользуюсь оперой...

В общем, надеюсь ты понял куда копать...
 
Сверху