Скрипт на онлайн без доступа к бд
5 ответов553 просмотровСейчас просматривают: 1
· 06.08.2009, 17:33
Не очень хочется лишние порты открывать для сайта, посиму вопрос есть ли скрипт для показа колл-во онлайн без требования доступа к бд? Например есть скрипт который показывает статус сервера с прокси. Если есть поделитесь, хотя врятли это возможно)
— b0uncepr.Ru
0
· 06.08.2009, 17:46
На самом сервере есть вебсервер? Для тех.нужд, админки итд?
— Ålderdom - ingen glädje..
0
· 07.08.2009, 05:06
вот нашел через аут, вроде неплохо.
Раскрывающийся текст
<?
//by Hint (27.06.2008)
class ServerStatus
{
private $ip,$port,$interval,$timeout;
public function __construct($ip='127.0.0.1',$port=2106,$interval=30,$timeout=1)
{
$this->ip=$ip;
$this->port=$port;
$this->interval=$interval;
$this->timeout=$timeout;
}
public function GetStatusFromAuth()
{
$status=array();
$f=@fsockopen($this->ip,$this->port,$errno,$errstr,$this->timeout);
if ($f)
{
do
{
$sec=floor($this->timeout);
$msec=($this->timeout-$sec)*1000;
socket_set_timeout($f,$sec,$msec);
$buf=fread($f,2);
if (strlen($buf)!=2) break;
$a=unpack('vsize',$buf);
$size=$a['size']-2;
if ($size<1) break;
$buf=fread($f,$size);
if (strlen($buf)!=$size) break;
fwrite($f,"\x03\x00\xFE",3);
$buf=fread($f,2);
if (strlen($buf)!=2) break;
$a=unpack('vsize',$buf);
$size=$a['size']-2;
if ($size<1) break;
$buf=fread($f,$size);
if (strlen($buf)!=$size) break;
if (ord($buf[0])!=0xFE) break;
if (strlen($buf)<3) break;
$amount=ord($buf[1])+ord($buf[2])*256;
$buf=substr($buf,3);
if (strlen($buf)!=$amount*4) break;
$a=unpack('v'.($amount*2),$buf);
for ($i=0;$i<$amount;$i++) $status[$a[$i*2+1]]=$a[$i*2+2];
}
while (false);
fclose ($f);
}
return $status;
}
public function GetStatus()
{
$fn=dirname(__FILE__).'/status.txt';
$status=array();
fclose(fopen($fn,'a+b'));
$f=@fopen($fn,'r+b');
if ($f)
{
flock($f,LOCK_EX);
$cache=unserialize(fread($f,1024));
$status=@$cache['status'];
$time=@$cache['time'];
if (!IsSet($status) || !IsSet($time))
{
$status=array();
$time=0;
}
if (time()-$time>$this->interval)
{
$new=$this->GetStatusFromAuth();
foreach ($status as $id => $value)
{
$c=&$status[$id];
$c['on']=false;
$c['cur']=0;
}
foreach ($new as $id => $value)
{
if (!IsSet($status[$id])) $status[$id]=array('on'=>false,'cur'=>0,'max'=>0);
$c=&$status[$id];
$c['on']=true;
$c['cur']=$new[$id];
if ($c['cur']>$c['max']) $c['max']=$c['cur'];
}
$cache=array('status'=>$status,'time'=>time());
$s=serialize($cache);
rewind($f);
ftruncate($f,0);
fwrite($f,$s,strlen($s));
}
fclose($f);
}
return $status;
}
public function GetText($id,$online,$offline)
{
$status=$this->GetStatus();
if (IsSet($status[$id])) $c=&$status[$id]; else $c=array('on'=>false,'cur'=>0,'max'=>0);
$res=str_replace(array('%c','%m'),array($c['cur'],$c['max']),$c['on']?$online:$offline);
return $res;
}
}
?>
пример:
Код
$status=new ServerStatus('127.0.0.1');
$online='Статус: <b><font color="#00AA00">online</font></b> | Игроков: <b>%c</b> | Рекорд: <b>%m</b>';
$offline='Статус: <b><font color="#FF0000">offline</font></b> | Игроков: <b>%c</b> | Рекорд: <b>%m</b>';
echo $status->GetText(1,$online,$offline); //1 - ID сервера
$online='Статус: <b><font color="#00AA00">online</font></b> | Игроков: <b>%c</b> | Рекорд: <b>%m</b>';
$offline='Статус: <b><font color="#FF0000">offline</font></b> | Игроков: <b>%c</b> | Рекорд: <b>%m</b>';
echo $status->GetText(1,$online,$offline); //1 - ID сервера
0
· 07.08.2009, 07:43
AbsT, да есть. Можно впринципе на серверный комп залить скрипт с использованием бд, и дать на веб сайт ссылку на этот скрипт. А сам скрипт можешь дать для онлайна? с использованием бд..
Jafar123, спасибо нажал но не помогло
— b0uncepr.Ru
0

В народе-Лёха, в сети-Берс
Пользователь
ВетеранПостов: 988
На форуме с: 22.06.2007
Репутация: +462
Рейтинг: 0
· 07.08.2009, 08:31
Код
<?php
$ip_auth = 'lineage2.alkar.net';
$ip_game = 'lineage2.alkar.net';
$port_auth = '2106';
$port_game = '7777';
$on = "<font color='green'><b>Работает</b></font>";
$off = "<font color='red'><b>Отключён</b></font>";
$unavailable = "<font color='red'><b>Недоступно</b></font>";
error_reporting(0);
$auth = fsockopen($ip_auth, $port_auth, $errno, $errstr, 1);
$game = fsockopen($ip_game, $port_game, $errno, $errstr, 1);
$stat = $game;
$pack=pack("vCi",6,0,-3);
fwrite($stat,$pack);
$read=fread($stat,73);
fclose($stat);
$unpack=unpack("vsize/Cid/iworld/imax/icurrent/iplaying/istore",$read);
$online_stat = "<b>{$unpack[playing]}</b>";
$trade_stat = "<b>{$unpack[store]}</b>";
if(!$auth){ $auth_status = $off; } else { $auth_status = $on; }
if(!$game){ $game_status = $off; } else { $game_status = $on; }
if(!$stat){ $online = $unavailable; $traders = $unavailable; } else { $online = $online_stat; $traders = $trade_stat; }
?>
<html>
<body bgcolor="#000000">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<table border="1" width="200">
<tr>
<td colspan="2"><center><font face="Arial Black" color="gray"><b>Статус сервера</b></font></center></td>
</tr>
<tr>
<td> <font color="gray" face="verdana" size="2">Авторизация: </font></td>
<td> <font size="1" face="verdana"><b><? echo "$auth_status" ?></b></font></td>
</tr>
<tr>
<td> <font color="gray" face="verdana" size="2">Гейм сервер: </font></td>
<td> <font size="1" face="verdana"><b><? echo "$game_status" ?></b></font></td>
</tr>
<tr>
<td><font size="1" color="gray" face="verdana"><b>Онлайн: <? echo "$online" ?></b></font></td>
<td><font size="1" color="gray" face="verdana"><b>Торгуют: <? echo "$traders" ?></b></font></td>
</tr>
</table>
</body>
</html>
$ip_auth = 'lineage2.alkar.net';
$ip_game = 'lineage2.alkar.net';
$port_auth = '2106';
$port_game = '7777';
$on = "<font color='green'><b>Работает</b></font>";
$off = "<font color='red'><b>Отключён</b></font>";
$unavailable = "<font color='red'><b>Недоступно</b></font>";
error_reporting(0);
$auth = fsockopen($ip_auth, $port_auth, $errno, $errstr, 1);
$game = fsockopen($ip_game, $port_game, $errno, $errstr, 1);
$stat = $game;
$pack=pack("vCi",6,0,-3);
fwrite($stat,$pack);
$read=fread($stat,73);
fclose($stat);
$unpack=unpack("vsize/Cid/iworld/imax/icurrent/iplaying/istore",$read);
$online_stat = "<b>{$unpack[playing]}</b>";
$trade_stat = "<b>{$unpack[store]}</b>";
if(!$auth){ $auth_status = $off; } else { $auth_status = $on; }
if(!$game){ $game_status = $off; } else { $game_status = $on; }
if(!$stat){ $online = $unavailable; $traders = $unavailable; } else { $online = $online_stat; $traders = $trade_stat; }
?>
<html>
<body bgcolor="#000000">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<table border="1" width="200">
<tr>
<td colspan="2"><center><font face="Arial Black" color="gray"><b>Статус сервера</b></font></center></td>
</tr>
<tr>
<td> <font color="gray" face="verdana" size="2">Авторизация: </font></td>
<td> <font size="1" face="verdana"><b><? echo "$auth_status" ?></b></font></td>
</tr>
<tr>
<td> <font color="gray" face="verdana" size="2">Гейм сервер: </font></td>
<td> <font size="1" face="verdana"><b><? echo "$game_status" ?></b></font></td>
</tr>
<tr>
<td><font size="1" color="gray" face="verdana"><b>Онлайн: <? echo "$online" ?></b></font></td>
<td><font size="1" color="gray" face="verdana"><b>Торгуют: <? echo "$traders" ?></b></font></td>
</tr>
</table>
</body>
</html>
— Ушёл на пенсию...
0
Тема закрыта для ответов


