Vzdálený přístup ke konzoli pomocí PHP

Z ZděchovNET
Skočit na navigaci Skočit na vyhledávání

Pokud chcete přímo z webu vykonávat některé důležité konzolové povely MaNGOSu, musíte mít nejprve povolenu v konfiguračním souboru mangosd.conf vzdálenou konzoli.

Ukázka kofigurace v souboru mangosd.conf:

Ra.Enable = 1
Ra.IP = 0.0.0.0
Ra.Port = 3443
Ra.MinLevel = 3
Ra.Secure = 1


Následně se můžete připojit z jiného počítače přes TCP/IP spojení na principu Telnetu nebo pro připojení použít následující PHP třídu.

Soubor RemoteConsole.php:

<?php

define('CONNECTION_ERROR', 'Připojení k %s:%s se nezdařilo.');
define('NO_SUCH_USER', 'Neznámý uživatel.');
define('WRONG_PASS', 'Špatné heslo.');
define('NOT_ENOUGH_PRIVILEGES', 'Nedostatečné oprávnění uživatele.');
define('AUTH_ERROR', 'Chyba během přihlašování.');

class RemoteConsole
{ 
  var $Socket;
  var $Host = 'localhost';
  var $Port = 3443;
  var $UserName = 'administrator';
  var $Password = 'administrator';
  var $WelcomeMessage;
   
  function Open()
  {
    $this->Socket = fsockopen($this->Host, $this->Port);
    if(!$this->Socket) die(sprintf(CONNECTION_ERROR, $this->Host, $this->Port));
    else 
    {
      $this->WelcomeMessage = trim(fgets($this->Socket, 1000));
      fputs($this->Socket, 'USER '.$this->UserName."\n");
      fputs($this->Socket, 'PASS '.$this->Password."\n");
      $Line = fgets($this->Socket, 1000);
      if($Line == "-No such user.\r\n") die(NO_SUCH_USER);
      if($Line == "-Wrong pass.\r\n") die(WRONG_PASS);
      if($Line == "-Not enough privileges.\r\n") die(NOT_ENOUGH_PRIVILEGES);        
      if($Line != "+Logged in.\r\n") die(AUTH_ERROR.': '.$Line);
      stream_get_line($this->Socket, 1000, 'mangos>');
    }
  }
  
  function Close()
  {
    fclose($this->Socket);
  }  
  
  function Execute($Command)
  {
    fputs($this->Socket, $Command."\n");
    stream_get_line($this->Socket, 1000, 'mangos>');
    $Data = stream_get_line($this->Socket, 100000, 'mangos>');
    return($Data);
  }
}

?>

Jde o celkem jednoduchou třídu, která zajišťuje vzdálené přihlášení a vykonávání povelů.

Ukázka použití:

<?php

include('RemoteConsole.php');

$MangosConsole = new RemoteConsole();
$MangosConsole->Host = 'localhost';
$MangosConsole->Port
$MangosConsole->UserName = 'user';
$MangosConsole->Password = 'password';
$MangosConsole->Open();
echo($Console->Execute('help'));
$MangosConsole->Close();

?>

Jak je vidět z příkladu, tak použití je intuitivní. Pomocí povelu help nebo commands lze vypsat všechny možné povely.

Další užitečné povely:

  • server info - Zobrazí informace o verzi emulátoru a databáze, počtu hráčů a době běhu.
  • server restart - Provede restart serveru.
  • account create <jméno> <heslo> - Vytvoří nový herní účet.
  • announce <text> - Zobrazí všem hráčům zprávu.
  • pdump write <jméno souboru> <guid nebo jméno> - Provede zálohu postavy do souboru.