Signatur
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
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);
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.