Start · Sprachen · PHP · Referenz · xmlrpc_decode_request

xmlrpc_decode_request

Funktion

Dekodiert eine XML-RPC-Anfrage (XML-String) in native PHP-Typen und extrahiert dabei den Methodennamen.

seit PHP 4.1.0 Kategorie: xml

Signatur

xmlrpc_decode_request(string $xml, string &$method, string $encoding = ''): mixed

Beschreibung

xmlrpc_decode_request() parst einen XML-RPC-Anfrage-String und konvertiert ihn in native PHP-Datentypen. Im Gegensatz zu xmlrpc_decode(), das ausschließlich Antworten verarbeitet, ist diese Funktion speziell für den Empfang von XML-RPC-Anfragen gedacht – also für den serverseitigen Einsatz, wenn ein XML-RPC-Server eingehende Anfragen verarbeiten möchte.

Der Methodenname der XML-RPC-Anfrage wird dabei in die als Referenz übergebene Variable $method geschrieben. Die übergebenen Parameter werden als PHP-Array zurückgegeben, das direkt für den Aufruf der entsprechenden Handler-Funktion genutzt werden kann.

Der optionale Parameter $encoding erlaubt die Angabe der Zeichenkodierung des XML-Strings, etwa 'UTF-8' oder 'ISO-8859-1'. Wird er weggelassen, versucht die Funktion die Kodierung selbst zu ermitteln.

Achtung: Die gesamte xmlrpc_*-Erweiterung ist in PHP seit Version 8.0 als veraltet (deprecated) markiert und wurde in PHP 8.4 entfernt. Für neue Projekte sollten stattdessen spezialisierte Bibliotheken wie phpxmlrpc/phpxmlrpc verwendet werden.

Parameter

Name Typ Default Beschreibung
$xml Pflicht string Der XML-RPC-Anfrage-String, der dekodiert werden soll. Typischerweise der rohe HTTP-Request-Body.
$method Pflicht string Wird per Referenz übergeben und nach dem Aufruf mit dem Namen der XML-RPC-Methode befüllt, die in der Anfrage aufgerufen werden soll.
$encoding string Optionale Zeichenkodierung des XML-Strings, z. B. 'UTF-8' oder 'ISO-8859-1'. Wird der Parameter weggelassen oder als leerer String übergeben, erkennt die Funktion die Kodierung automatisch.

Rückgabewert

Typ
mixed
Beschreibung
Gibt die dekodierten XML-RPC-Parameter als PHP-Array zurück. Bei einem ungültigen oder nicht dekodierba­ren XML-String wird null oder false zurückgegeben.

Beispiele

Eingehende XML-RPC-Anfrage serverseitig verarbeiten

<?php
// Beispiel-XML-RPC-Anfrage (normalerweise aus php://input gelesen)
$xmlRequest = '<?xml version="1.0"?>
<methodCall>
  <methodName>calculator.add</methodName>
  <params>
    <param><value><int>5</int></value></param>
    <param><value><int>3</int></value></param>
  </params>
</methodCall>';

$method = '';
$params = xmlrpc_decode_request($xmlRequest, $method);

echo 'Methode: ' . $method . PHP_EOL;
echo 'Parameter: ';
print_r($params);
Methode: calculator.add Parameter: Array ( [0] => 5 [1] => 3 )

Einfacher XML-RPC-Server-Dispatcher

<?php
// Verfügbare Handler-Funktionen
function calculator_add(int $a, int $b): int {
    return $a + $b;
}

// Eingehende Anfrage aus dem HTTP-Body lesen
$rawXml = file_get_contents('php://input');

if (empty($rawXml)) {
    // Fallback für das Demo-Beispiel
    $rawXml = '<?xml version="1.0"?>
<methodCall>
  <methodName>calculator.add</methodName>
  <params>
    <param><value><int>10</int></value></param>
    <param><value><int>20</int></value></param>
  </params>
</methodCall>';
}

$method = '';
$params = xmlrpc_decode_request($rawXml, $method, 'UTF-8');

if ($params === null || $params === false) {
    echo 'Fehler: Ungültige XML-RPC-Anfrage.' . PHP_EOL;
    exit(1);
}

// Methodennamen auf Handler abbilden (Punkt durch Unterstrich ersetzen)
$handlerName = str_replace('.', '_', $method);

if (function_exists($handlerName)) {
    $result = call_user_func_array($handlerName, $params);
    $response = xmlrpc_encode_request(null, $result);
    header('Content-Type: text/xml');
    echo $response;
} else {
    echo 'Fehler: Methode "' . htmlspecialchars($method) . '" nicht gefunden.' . PHP_EOL;
}

// Wichtig · Fallstricke

Deprecation: Die xmlrpc_*-Funktionsfamilie wurde in PHP 8.0 als veraltet markiert (deprecated) und in PHP 8.4 vollständig entfernt. Für neue oder langlebige Projekte sollten Alternativen wie die Bibliothek phpxmlrpc/phpxmlrpc eingesetzt werden.

Sicherheit: XML-RPC-Anfragen können beliebige XML-Inhalte enthalten. Die Eingabe sollte vor der Verarbeitung grundsätzlich validiert werden. Insbesondere bei der Verwendung geparster Methodennamen zum dynamischen Funktionsaufruf (wie im Dispatcher-Beispiel) muss sichergestellt sein, dass nur erlaubte Methoden aufrufbar sind, um Remote Code Execution zu vermeiden.

Verfügbarkeit: Die Erweiterung ist nicht Teil der PHP-Standardinstallation und muss beim Build explizit mit --with-xmlrpc aktiviert werden. Viele Distribution-Pakete liefern sie jedoch mit.