Помогите настроить "гости онлайн"

lirikk

Создатель
Регистрация
18 Авг 2007
Сообщения
18
Реакции
3
Добрый день знатоки php!
Помогите мне с одной маленькой проблемой если не трудно)
Хочу сделать вывод гостей (всего онлайн), есть база и сам скрипт online.php
Вставляю его на страницу index.tpl
Код:
{php} include 'online.php'; {/php}

Но мне выводит, только тех кто просматривает именно главную страницу, а не полностью весь сайт.

В чем собственно нужна помощь:
как мне сделать чтоб он считывал инфу со всего сайта, не могу понять как скажем прописать файл online.php скажем в footer.tpl, и естественно сделать вывод только на главной странице (index.tpl)

ниже сам код файла online.php
Код:
$config = array(
'online_time' => '1', //В минутах
);
 
$connect_config = array(
'host' => 'localhost',
'user' => 'root',
'pass' => 'mangos',
'db' => 'guest_online'
);
 
if(!$_COOKIE['uniq_id'])
{
    $uniq_id = uniqid();
    setcookie('uniq_id',$uniq_id,(time()+3600*24*30));
}
else $uniq_id = $_COOKIE['uniq_id'];
 
$con = mysql_connect($connect_config['host'],$connect_config['user'],$connect_config['pass'],true);
if($con == false) die('<p style="color:red; font-weight:bold; font-size:14px">Failed to connect with DB '.$connect_config['db'].'!</p>');
mysql_select_db($connect_config['db'],$con) or die('<p style="color:red; font-weight:bold; font-size:14px">Failed to connect with '.$connect_config['user'].'@'.$connect_config['host'].'!</p>');
 
mysql_query("delete from online_list where last_time<".(time()-$config['online_time']*60),$con);
 
if(preg_match("/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/isU",$_SERVER['REMOTE_ADDR']) and !preg_match("/[^a-zA-Z0-9\_\[\]\.\(\)\-]/isU",$uniq_id))
{
    $last_time = mysql_result(mysql_query("select last_time from online_list where uniq_id = '".$uniq_id."' and ip = '".$_SERVER['REMOTE_ADDR']."'",$con),0,0);
   
    if(!$last_time) mysql_query("insert into online_list (uniq_id, ip, last_time) values ('".$uniq_id."', '".$_SERVER['REMOTE_ADDR']."', '".time()."')",$con);
    else mysql_query("update online_list set last_time = '".time()."' where uniq_id = '".$uniq_id."' and ip = '".$_SERVER['REMOTE_ADDR']."'",$con);
}
 
$online = intval(mysql_result(mysql_query("select count(*) from online_list where last_time>".(time()-$config['online_time']*60),$con),0,0));
//$online - кол-во гостей на сайте
 
mysql_close($con);
unset($con);
 
echo $online;

Может не правильно выразил суть проблемы, сильно не ругайте)

За ранее спасибо!
 
В скрипте удали последнюю строку: (echo $online;)
Для страниц, на которых хочешь выводить код, пиши:
{php}include 'online.php';
echo $online;
{/php}

Для остальных: {php} include 'online.php'; {/php}

PS: скрипт не очень оптимально написан, создаёт нагрузку, которой можно было бы избежать. :)
 
В скрипте удали последнюю строку: (echo $online;)
Для страниц, на которых хочешь выводить код, пиши:
{php}include 'online.php';
echo $online;
{/php}

Для остальных: {php} include 'online.php'; {/php}

PS: скрипт не очень оптимально написан, создаёт нагрузку, которой можно было бы избежать. :)

возможно ли написать нормальный или оптимизировать)
ну не бесплатно конечно
 
Так кто поможет, оптимизировать данный скрипт online, чтоб было минимум нагрузки ?
И потом вставить его, как рекомендует Latteo
 
С оптимизацией можешь сильно не заморачиваться, если посетителей мало (до нескольких сотен), скрипт лишь сотые доли секунды выполняется.

И сам я вариант тоже не очень оптимальный привёл :oops: Лучше так подключать:
{php}
$echo_online = true;
include 'online.php';
{/php}

В коде online.php вставить строки:
PHP:
if(isset($echo_online) &&  $echo_online == true){
$online = intval(mysql_result(mysql_query("select count(*) from online_list where last_time>".(time()-$config['online_time']*60),$con),0,0));
//$online - кол-во гостей на сайте
echo $online;
}
перед mysql_close($con); удалив из скрипта строчки, которые в фигурных скобках приведены выше.
Это поможет избежать лишнего запроса, когда скрипт не выводит количество онлайн посетителей.
 
Latteo проверьте, правильно ли я все сделал:
Я заменяю эту строчку:
PHP:
$online = intval(mysql_result(mysql_query("select count(*) from online_list where last_time>".(time()-$config['online_time']*60),$con),0,0));
//$online - кол-во гостей на сайте

На эту :
PHP:
if(isset($echo_online) &&  $echo_online == true){
$online = intval(mysql_result(mysql_query("select count(*) from online_list where last_time>".(time()-$config['online_time']*60),$con),0,0));
//$online - кол-во гостей на сайте
echo $online;
}

При этом удаляю нижнию строку echo $online; , которая идет после
PHP:
mysql_close($con);
unset($con);
 
Всё верно, работает у тебя без ошибок?
У меня варнингами мускуль плюётся на такое использование mysql_result, хотя это не снижает работоспособность, но говорит о не очень качественном коде. Ну и если в движке нет подавления ошибок, то это недопустимо.
 
Все отлично, спасаибо за помощь, работает великолепно, сам глянь
 
Назад
Сверху