Headymaster
Erfahrenes Mitglied
So habe mal was versucht in PHP um erstma überhaupt ne Ausgabe über nen Gameserver zu bekommen.
Habe das ganze mal über paar Tutorials und so eben zusammengebastelt.....hmmm....aber das Prob ist, dass ich glaube, das ich net dauerschleife drinne habe oder so, denn er läd und läd und läd und dann kommt:
Fatal error: Maximum execution time of 60 seconds exceeded in.... on line 44
Hier mal der Code zu schauen
Würde mich über Hilfe freuen
MFG Niels
Habe das ganze mal über paar Tutorials und so eben zusammengebastelt.....hmmm....aber das Prob ist, dass ich glaube, das ich net dauerschleife drinne habe oder so, denn er läd und läd und läd und dann kommt:
Fatal error: Maximum execution time of 60 seconds exceeded in.... on line 44
Hier mal der Code zu schauen
PHP:
<?php
class serverquery
{
private $servercon; // Enthält eine Verbiundung zu einem GameServer
private $ip;
private $port;
// Variablen zur Ausgabe der Infos
private $serverinfo;
private $playerlist;
private $cvarlist;
function __cunstruct($ip, $port)
{
$this->ip = $ip;
$this->port = $port;
}
//#############################################################################//
// 1. Baut eine Verbindung mit einem Gameserver auf //
//#############################################################################//
function congs()
{
if(!$this->servercon = fsockopen("udp://".$this->ip, $this->port, $errno, $errstr, 3))
{
@socket_set_timeout($this->servercon, 3);
die(sprintf("Verbindung zu %s:%s konnte nicht hergestellt werden!", $this->ip, $this->port));
}
}
//#############################################################################//
// 1. Sendet einen String-Command //
// 2. 1 Byte vom Server holen //
// 3. 1 Zeichen (1 Byte) vom Server holen //
// 4. Einen INT16-Wert (2 Byte) vom Server holen //
// 5. Einen INT32-Wert (4 Byte) vom Server holen //
// 6. Einen Float32-Wert (4 Byte) vom Server holen //
// 7. Einen String vom Server holen bis Zero-Zeichen //
//#############################################################################//
function send_strcmd($strcmd)
{
fwrite($this->servercon, sprintf('%c%c%c%c%s%c', 0xFF, 0xFF, 0xFF, 0xFF, $strcmd, 0x00));
}
function get_byte()
{
return ord(fread($this->servercon, 1));
}
function get_char()
{
return fread($this->servercon, 1);
}
function get_int16()
{
$unpacked = unpack('sint', fread($this->servercon, 2));
return $unpacked[int];
}
function get_int32()
{
$unpacked = unpack('iint', fread($this->servercon, 4));
return $unpacked[int];
}
function get_float32()
{
$unpacked = unpack('fint', fread($this->servercon, 4));
return $unpacked[int];
}
function get_string()
{
while (($char = fread($this->servercon, 1)) != chr(0))
{
$str .= $char;
}
return $str;
}
//#############################################################################//
// Ping einen Gameserver an //
// 1. Liest die Serverinfos des HL-Server aus //
// 2. Liest die Playerdetails des HL-Servers aus //
//#############################################################################//
function ping()
{
$this->congs();
$time1 = explode(' ', microtime());
$this->send_strcmd("ping");
$time2 = explode(' ', microtime());
$this->serverinfo["ping"] = ($time2[0]-$time1[0])*1000000;
$this->disc();
return $serverinfo["ping"];
}
function infos()
{
$this->congs();
$this->send_strcmd("details");
$this->get_int32(); // -1
$this->get_char(); // ASCII 'm' (S2A_INFO_DETAILED)
$this->serverinfo["address"] = $this->get_string();
$this->serverinfo["name"] = $this->get_string();
$this->serverinfo["map"] = $this->get_string();
$this->serverinfo["gamedir"] = $this->get_string();
$this->serverinfo["game"] = $this->get_string();
$this->serverinfo["players"] = $this->get_byte();
$this->serverinfo["maxplayers"] = $this->get_byte();
$this->serverinfo["protocol"] = $this->get_byte();
$this->serverinfo["type"] = $this->get_char();
$this->serverinfo["os"] = $this->get_char();
$this->serverinfo["password"] = $this->get_byte();
$this->serverinfo["mod"] = $this->get_byte();
if($this->serverinfo["mod"] == 1)
{
$this->serverinfo["mod_info"] = $this->get_string();
$this->serverinfo["mod_dl"] = $this->get_string();
$this->serverinfo["mod_version"] = $this->get_int32()/256;
}
if($this->serverinfo["type"] == 'd')
{
$this->serverinfo["type"] = "Dedicated";
}
else
{
$this->serverinfo["type"] = "Listen";
}
if($this->serverinfo["os"] == 'w')
{
$this->serverinfo["os"] = "Windows";
}
else
{
$this->serverinfo["os"] = "Linux";
}
if($this->serverinfo["password"] == '1')
{
$this->serverinfo["password"] = "Ja";
}
else
{
$this->serverinfo["password"] = "Nein";
}
$this->send_strcmd("infostring");
$this->get_int32(); // -1
fread($this->congs, 20);
$infostring = explode("\\", $this->get_string());
$this->serverinfo["proxytarget"] = $infostring[7];
if($this->serverinfo["proxytarget"] == '1')
{
$this->serverinfo["proxytarget"] = "Ja";
}
else
{
$this->serverinfo["proxytarget"] = "Nein";
}
$this->disc();
return $this->serverinfo;
}
function get_plinfo_hl()
{
$this->congs();
$this->send_strcmd("players");
$this->get_int32(); // -1
$this->get_char(); // ASCII 'D' (S2A_PLAYERS)
$playercount = $this->get_byte();
for($i=0; $i < $playercount; $i++)
{
$this->playerlist[$i]["index"] = $this->get_byte();
$this->playerlist[$i]["name"] = $this->get_string();
$this->playerlist[$i]["frags"] = $this->get_int32();
$this->playerlist[$i]["time"] = date('H:i:s', round($this->get_float32(), 0)+82800);
}
$this->disc();
return $this->playerlist;
}
function cvars()
{
$this->congs();
$this->send_strcmd("rules");
$this->get_int32(); // -1
$this->get_char(); // ASCII 'E' (S2A_RULES)
$cvarcount = $this->get_int16();
for($i=0; $i < $cvarcount; $i++)
{
$this->cvarlist[$this->get_string()] = $this->get_string();
}
$this->disc();
return $this->cvarlist;
}
//#############################################################################//
// 1. Baut die Verbindung mit einem Gameserver ab //
//#############################################################################//
function disc()
{
if($this->servercon)
{
fclose($this->servercon);
}
}
}
$hlserver = new serverquery('85.14.224.114', '27015');
echo $hlserver->ping();
echo $hlserver->infos();
echo $hlserver->get_plinfo_hl();
$hlserver->disc();
Würde mich über Hilfe freuen
MFG Niels