Code:
<?php
// ** Beispiel:
// * Einschließlich der RemoteAdmin PHP-Klasse.
include('RemoteAdmin.php');
// * Klassen Parameter.
$myRemoteAdmin = new RemoteAdmin('127.0.0.1', 9000, 'secret');
// * admin_acl aufrufen (mit mehreren Parametern)
$parameters = array('region_name' => 'My Plaza', 'users' => 'John Doe');
// ** admin_acl_add ermöglicht aus der Ferne das Hinzufügen einer Liste von Benutzern zur Zugriffskontrollliste.
// * Benutzer hinzufuegen:
$myRemoteAdmin->SendCommand('admin_acl_add', $parameters);
// * Benutzer entfernen
//$myRemoteAdmin->SendCommand('admin_acl_remove', $parameters);
?>
Code:
<?php
class RemoteAdmin
{
function __construct($sURL, $sPort, $pass)
{
$this->simulatorURL = $sURL;
$this->simulatorPort = $sPort;
$this->password = $pass;
}
function SendCommand($command, $params=array())
{
$paramsNames = array_keys($params);
$paramsValues = array_values($params);
$xml = '
<methodCall>
<methodName>'.htmlspecialchars($command).'</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>password</name>
<value><string>'.htmlspecialchars($this->password).'</string></value>
</member>';
if (count($params) != 0)
{
for ($p = 0; $p < count($params); $p++)
{
$xml .= '<member><name>'.htmlspecialchars($paramsNames[$p]).'</name>';
$xml .= is_int($paramsValues[$p]) ? '<value><int>'.$paramsValues[$p].'</int></value></member>' : '<value><string>'.htmlspecialchars($paramsValues[$p]).'</string></value></member>';
}
}
$xml .= '</struct>
</value>
</param>
</params>
</methodCall>';
$host = $this->simulatorURL;
$port = $this->simulatorPort;
$timeout = 5;
error_reporting(0);
$fp = fsockopen($host, $port, $errno, $errstr, $timeout);
if (!$fp)
{
return FALSE;
}
else
{
fputs($fp, "POST / HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Content-type: text/xml\r\n");
fputs($fp, "Content-length: ". strlen($xml) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $xml);
$res = "";
while(!feof($fp))
{
$res .= fgets($fp, 128);
}
fclose($fp);
$response = substr($res, strpos($res, "\r\n\r\n"));
$result = array();
if (preg_match_all('#<name>(.+)</name><value><(string|int|boolean|i4)>(.*)</\2></value>#U', $response, $regs, PREG_SET_ORDER))
{
foreach($regs as $key => $val)
{
$result[$val[1]] = $val[3];
}
}
return $result;
}
}
}
?>