Sie sind nicht angemeldet.

1

Freitag, 20. Februar 2015, 10:34

rcon stats per php ausgeben

Hallo

Wollte per php script den stats Befehl ausführen und die Ausgabe davon ausgeben.

Bekomme aber immer nur NULL zurück.
Das komische ist, dass es mit cvarlist funktioniert.

Der stats Befehl wird auch ausgeführt, was ich in der Console sehen kann, nur wird eben nichts zurück gegeben.

Achja und ähnliches Thema, wenn ich den stats Befehl per shellscript an den screen schicke, bekomme ich die Ausgabe dann irgendwie in ne Variable oder DAtei umgelenkt?


Siehe:
http://rip-server.de/garry/neu2/stats.php
http://rip-server.de/garry/neu2/cvarlist.php


php Klasse ist diese hier:

Spoiler Spoiler

<?php
/*
Basic CS:S Rcon class by Freman. (V1.00)
----------------------------------------------
Ok, it's a completely working class now with with multi-packet responses

Contact: printf("%s%s%s%s%s%s%s%s%s%d%s%s%s","rc","on",chr(46),"cl","ass",chr(64),"pri","ya",chr(46),2,"y",chr(46),"net")

Behaviour I've noticed:
rcon is not returning the packet id.
*/

define("SERVERDATA_EXECCOMMAND",2);
define("SERVERDATA_AUTH",3);

class RCon {
var $Password;
var $Host;
var $Port = 27015;
var $_Sock = null;
var $_Id = 0;

function RCon ($Host,$Port,$Password) {
$this->Password = $Password;
$this->Host = $Host;
$this->Port = $Port;
$this->_Sock = @fsockopen($this->Host,$this->Port, $errno, $errstr, 30) or
die("Unable to open socket: $errstr ($errno)\n");
$this->_Set_Timeout($this->_Sock,2,500);
}

function Auth () {
$PackID = $this->_Write(SERVERDATA_AUTH,$this->Password);

// Real response (id: -1 = failure)
$ret = $this->_PacketRead();
if ($ret[1]['id'] == -1) {
die("Authentication Failure\n");
}
}

function _Set_Timeout(&$res,$s,$m=0) {
if (version_compare(phpversion(),'4.3.0','<')) {
return socket_set_timeout($res,$s,$m);
}
return stream_set_timeout($res,$s,$m);
}

function _Write($cmd, $s1='', $s2='') {
// Get and increment the packet id
$id = ++$this->_Id;

// Put our packet together
$data = pack("VV",$id,$cmd).$s1.chr(0).$s2.chr(0);

// Prefix the packet size
$data = pack("V",strlen($data)).$data;

// Send packet
fwrite($this->_Sock,$data,strlen($data));

// In case we want it later we'll return the packet id
return $id;
}

function _PacketRead() {
//Declare the return array
$retarray = array();
//Fetch the packet size
while ($size = @fread($this->_Sock,4)) {
$size = unpack('V1Size',$size);
//Work around valve breaking the protocol
if ($size["Size"] > 4096) {
//pad with 8 nulls
$packet = "\x00\x00\x00\x00\x00\x00\x00\x00".fread($this->_Sock,4096);
} else {
//Read the packet back
$packet = fread($this->_Sock,$size["Size"]);
}
array_push($retarray,unpack("V1ID/V1Response/a*S1/a*S2",$packet));
}
return $retarray;
}

function Read() {
$Packets = $this->_PacketRead();

foreach($Packets as $pack) {
if (isset($ret[$pack['ID']])) {
$ret[$pack['ID']]['S1'] .= $pack['S1'];
$ret[$pack['ID']]['S2'] .= $pack['S1'];
} else {
$ret[$pack['ID']] = array(
'Response' => $pack['Response'],
'S1' => $pack['S1'],
'S2' => $pack['S2'],
);
}
}
return $ret;
}

function sendCommand($Command) {
$Command = '"'.trim(str_replace(' ','" "', $Command)).'"';
$this->_Write(SERVERDATA_EXECCOMMAND,$Command,'');
}

function rconCommand($Command) {
$this->sendcommand($Command);

$ret = $this->Read();

//ATM: Source servers don't return the request id, but if they fix this the code below should read as
// return $ret[$this->_Id]['S1'];
return $ret[0]['S1'];
}
}



?>



und meine Abfrage Script ist das hier:

Spoiler Spoiler

<?php


include_once("rcon.class.php");

$r = new rcon("*********",********,"*********");
$r->Auth();

echo "Authenticated\n";

echo '<pre>' , var_dump ($r->rconCommand("stats")) , '</pre>';

#var_dump($r->rconCommand("stats"));

?>
<!-- m --><a class="postlink" href="http://www.clan-tbm.de">http://www.clan-tbm.de</a><!-- m -->

2

Samstag, 21. Februar 2015, 10:24

Hallo.

Nur mal eine kleine Idee, vielleicht wegen den sock im Code?:


var$_Sock = null;


Versuche dies doch mal zu ändern oder so, z.B.

var$_Sock = 1;

Greetz
Rechtschreibfehler sind voll normal

3

Sonntag, 22. Februar 2015, 23:27

Hat leider nichts gebracht.

Ist halt auch komisch, dass er die Ausgabe von cvarlist zurückgibt aber von stats nicht.

Hoffe dass noch jemand ne LÖsung parat hat :)

Gruß
<!-- m --><a class="postlink" href="http://www.clan-tbm.de">http://www.clan-tbm.de</a><!-- m -->

Ähnliche Themen