PDA

View Full Version : Einstellungen per sqlite bearbeiten - Wie übernehmen?


Felix K.
01-06-2009, 12:25
Hallo,

ich bin gerade dabei mein Teamspeak-Webinterface etwas umzuschreiben, sodass es statt des Queryports die sqlite-Datenbank benutzt.

Das Ändern der Einstellungen klappt soweit auch, nur leider werden die Änderungen nicht auf den Server übernommen. Hier mein Code:

<?php
$ts->query("UPDATE ts2_servers
SET s_server_name = '".sqlite_escape_string($_POST['name'])."'
WHERE i_server_udpport = ".$db_port);

$wi->rehash($db_port);
?>

$ts ist ein Object "SQLiteDatabase", womit ich die server.dbs bearbeite.
$wi ist meine Webinterface-Klasse, womit ich den Server starten und stoppen kann sowie prüfe, ob der User berechtigt ist etc.

Code der Methode rehash():
<?php
public function rehash($port) {
$return = false;

if ($conn = fsockopen(IP, TCPQUERY, $errNo, $errStr, 0.5)) {

$sRead = '';
$timeout = time()+2;

do {
$cRead = fgets($conn);
} while ($cRead != "[TS]\r\n" && $cRead != "OK\r\n" && strtoupper(substr($cRead, 0, 5)) != "ERROR" && time() <= $timeout);

fwrite($conn, "SLOGIN superadmin meinpw\n");

$sRead = '';
$timeout = time()+2;

do {
$cRead = fgets($conn);
} while ($cRead != "[TS]\r\n" && $cRead != "OK\r\n" && strtoupper(substr($cRead, 0, 5)) != "ERROR" && time() <= $timeout);

fwrite($conn, 'SEL '.$port."\n");

$sRead = '';
$timeout = time()+2;

do {
$cRead = fgets($conn);
} while ($cRead != "[TS]\r\n" && $cRead != "OK\r\n" && strtoupper(substr($cRead, 0, 5)) != "ERROR" && time() <= $timeout);

fwrite($conn, "REHASH\n");

$sRead = '';
$timeout = time()+2;

do {
$cRead = fgets($conn);
$sRead .= $cRead;
} while ($cRead != "[TS]\r\n" && $cRead != "OK\r\n" && strtoupper(substr($cRead, 0, 5)) != "ERROR" && time() <= $timeout);

if (trim($sRead) == "OK") {
$return = true;
}

fwrite($conn, 'QUIT');
fclose($conn);
}

return $return;
}
?>

$wi->rehash() gibt definitiv true zurück, eine Ausgabe aller Lesevorgänge bringt nur [TS] und OK ..

maxi1990
01-06-2009, 13:58
Änderungen, die in der Datenbank gemacht wurden, erfordern den Neustart des virtuellen Servers. "rehash" reicht da nicht aus.

Hook88
01-06-2009, 14:33
@maxi: Soweit ich weiß betrifft dies doch nur die Channel :confused:
Grundsätzlich empfiehlt es sich, die Funktionen zu nutzen die über die Queryschnittstelle bereitgestellt werden. Den Servernamen kann man definitiv darüber setzen, genauso wie Slots usw. ... Lediglich die Rechte können nicht direkt über die Queryschnittstelle angepasst werden.
Du kannst auch den sql-Befehl der Queryschnittstelle benutzen, dann brauchst du nicht direkt auf die Datenbank zuzugreifen.

Felix K.
01-06-2009, 15:30
Eben die Queryschnittstelle wollte ich nicht benutzen :/

Das komische ist ja, dass es für Bans und Loginuser mit rehash geht, für Servereinstellungen wie Name oder Welcomemessage eben nicht.

Wenn dafür ein Neustart des Virtuellen Servers notwendig ist, macht das natürlich eher wenig Sinn, das direkt über die Datenbank zu machen, wo mir das doch so gefallen hat, weil man keine Passwörter etc. braucht ...

Hook88
01-06-2009, 16:53
Das komische ist ja, dass es für Bans und Loginuser mit rehash geht, für Servereinstellungen wie Name oder Welcomemessage eben nicht.
Dafür gibt es ja die Befehle über die Queryschnittstelle.
wo mir das doch so gefallen hat, weil man keine Passwörter etc. braucht ...
Für den Befehl "rehash" musst du sowieso auf die Queryschnittstelle zugreifen ;)