Но это для PTS.
<?
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];
$c['cur']=$c['cur']+24;
$file = fopen("online.txt", "w");
fwrite($file, $c['cur']);
fclose($file);
}
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='%c';
$offline='%c';
echo $status->GetText(7,$online,$offline);
?>Code: PHP