Start · Sprachen · PHP · Referenz · xmlrpc_server_register_method

xmlrpc_server_register_method

Funktion

Registriert eine PHP-Funktion als Handler für eine benannte XML-RPC-Methode auf einem XML-RPC-Server.

seit PHP 4.1.0 Kategorie: xml

Signatur

xmlrpc_server_register_method(resource $server, string $method_name, callable $method): bool

Beschreibung

xmlrpc_server_register_method() verknüpft eine PHP-Funktion oder ein Callable mit einem bestimmten XML-RPC-Methodennamen. Wenn ein XML-RPC-Client anschließend eine Anfrage mit diesem Methodennamen stellt, ruft der Server automatisch die registrierte PHP-Funktion auf und gibt deren Rückgabewert als XML-RPC-Antwort zurück.

Der registrierte Handler erhält zwei Parameter: den Methodennamen als string und die übergebenen Argumente als array. Der Rückgabewert der Funktion wird direkt als XML-RPC-Ergebnis serialisiert, wobei PHP-Typen automatisch in die entsprechenden XML-RPC-Typen umgewandelt werden.

Typischer Einsatz ist der Aufbau eines einfachen XML-RPC-Servers, bei dem verschiedene Methoden über xmlrpc_server_register_method() registriert und dann mit xmlrpc_server_call_method() aufgerufen werden. Diese Funktion eignet sich für schnelle Prototypen oder interne Dienste, bei denen ein vollständiges Framework wie SOAP zu schwergewichtig wäre.

Achtung: Die XML-RPC-Erweiterung gilt als experimentell und ist seit PHP 8.0 als veraltet markiert. Für produktive Anwendungen sollten modernere Alternativen wie ext/soap oder dedizierte Bibliotheken bevorzugt werden.

Parameter

Name Typ Default Beschreibung
$server Pflicht resource Eine XML-RPC-Server-Ressource, die zuvor mit xmlrpc_server_create() erzeugt wurde.
$method_name Pflicht string Der Name der XML-RPC-Methode, unter dem der Handler registriert wird, z. B. 'calculator.add'. Dieser Name wird vom XML-RPC-Client verwendet, um die Methode aufzurufen.
$method Pflicht callable Die PHP-Funktion oder das Callable, das als Handler für die Methode fungiert. Der Handler wird mit den Parametern string $method_name und array $args aufgerufen.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Methode erfolgreich registriert wurde, andernfalls false.

Beispiele

Einfacher XML-RPC-Server mit registrierter Methode

<?php
// Hilfsfunktion: addiert zwei Zahlen
function calculator_add(string $method_name, array $args): int
{
    // $args[0] enthält die übergebenen Parameter als Array
    $params = $args[0];
    return (int)($params[0] + $params[1]);
}

// XML-RPC-Server erstellen
$server = xmlrpc_server_create();

// Methode registrieren
xmlrpc_server_register_method($server, 'calculator.add', 'calculator_add');

// Simulierte XML-RPC-Anfrage
$request = xmlrpc_encode_request('calculator.add', [3, 7]);

// Anfrage verarbeiten und Antwort ausgeben
$response = xmlrpc_server_call_method($server, $request, null);
echo $response;

// Server-Ressource freigeben
xmlrpc_server_destroy($server);
<?xml version="1.0" encoding="iso-8859-1"?> <methodResponse> <params> <param><value><int>10</int></value></param> </params> </methodResponse>

Registrierung mehrerer Methoden und HTTP-Verarbeitung

<?php
function greet(string $method_name, array $args): string
{
    $name = $args[0][0] ?? 'Welt';
    return 'Hallo, ' . htmlspecialchars($name, ENT_QUOTES, 'UTF-8') . '!';
}

function get_time(string $method_name, array $args): string
{
    return date('Y-m-d H:i:s');
}

$server = xmlrpc_server_create();
xmlrpc_server_register_method($server, 'hello.greet', 'greet');
xmlrpc_server_register_method($server, 'system.time', 'get_time');

// Im realen Einsatz: HTTP POST-Body lesen
$rawPost = file_get_contents('php://input');
if ($rawPost) {
    header('Content-Type: text/xml; charset=utf-8');
    echo xmlrpc_server_call_method($server, $rawPost, null);
}

xmlrpc_server_destroy($server);

// Wichtig · Fallstricke

Veraltete Erweiterung: Die XML-RPC-Erweiterung von PHP ist experimentell und wurde nie als stabil eingestuft. Ab PHP 8.0 ist sie offiziell als deprecated markiert und könnte in zukünftigen PHP-Versionen entfernt werden. Für neue Projekte sollten Alternativen wie ext/soap oder Bibliotheken wie JSON-RPC-Libraries verwendet werden.

Sicherheit: Da XML-RPC-Daten direkt aus dem HTTP-Request verarbeitet werden, ist unbedingt darauf zu achten, dass alle vom Client übermittelten Argumente serverseitig validiert und bereinigt werden. Benutzereingaben dürfen niemals ungeprüft in Datenbankabfragen oder Systemaufrufe übernommen werden.

Die Funktion ist nur verfügbar, wenn PHP mit der --with-xmlrpc-Option kompiliert wurde. Auf vielen modernen Systemen ist diese Erweiterung nicht mehr standardmäßig vorhanden.