Signatur
Beschreibung
xmlrpc_encode_request() serialisiert eine XML-RPC-Methodenanfrage in einen gültigen XML-String. Der resultierende String enthält ein <methodCall>-Element mit dem Methodennamen sowie den kodierten Parametern und kann direkt als HTTP-Body an einen XML-RPC-Server gesendet werden.
Die Funktion unterstützt alle von XML-RPC definierten Datentypen: Strings, Integer, Double, Boolean, Arrays und Structs (assoziative Arrays). PHP-native Typen werden dabei automatisch in die entsprechenden XML-RPC-Typen überführt. Über den Parameter output_options kann unter anderem die Zeichenkodierung oder der XML-Versionsheader beeinflusst werden.
Typische Einsatzfälle sind das Aufrufen externer XML-RPC-Dienste, z. B. WordPress-Blogs, Bugtracker-APIs oder Monitoring-Systeme, die XML-RPC als Protokoll verwenden. In modernen Projekten wurden XML-RPC-APIs häufig durch REST- oder GraphQL-APIs abgelöst, dennoch ist XML-RPC in Legacy-Systemen noch weit verbreitet.
Achtung: Die xmlrpc_*-Funktionen sind seit PHP 8.0 als veraltet markiert (deprecated) und können in künftigen PHP-Versionen entfernt werden. Es empfiehlt sich, auf eine externe Bibliothek (z. B. phpxmlrpc/phpxmlrpc) umzusteigen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $method Pflicht | string | Name der aufzurufenden XML-RPC-Methode, z. B. 'wp.getPosts' oder 'system.listMethods'. |
|
| $params Pflicht | mixed | Die zu übertragenden Parameter. Kann ein einzelner Wert, ein Array oder null sein. Arrays werden als XML-RPC-array oder struct (bei assoziativen Arrays) kodiert. |
|
| $output_options | array | [] | Optionales Array mit Ausgabeoptionen. Mögliche Schlüssel sind u. a. output_type ('php' oder 'xml'), verbosity ('no_white_space', 'newlines_only', 'pretty'), escaping (z. B. 'markup'), version ('xmlrpc', 'soap 1.1', 'auto') und encoding (z. B. 'UTF-8'). |
Rückgabewert
<methodCall>-Anfrage repräsentiert und direkt als HTTP-Request-Body verwendet werden kann.Beispiele
Einfache XML-RPC-Anfrage erzeugen
<?php
// Erstellt eine XML-RPC-Anfrage für die Methode 'system.listMethods'
$xml = xmlrpc_encode_request('system.listMethods', null);
echo $xml;
XML-RPC-Anfrage mit Parametern und HTTP-Versand via cURL
<?php
// Anfrage für WordPress xmlrpc.php: Alle Posts abrufen
$params = [
1, // Blog-ID
'admin', // Benutzername
'geheim', // Passwort
10, // Anzahl Posts
];
$options = [
'encoding' => 'UTF-8',
'verbosity' => 'pretty',
];
$xmlRequest = xmlrpc_encode_request('metaWeblog.getRecentPosts', $params, $options);
$ch = curl_init('https://example.com/xmlrpc.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlRequest);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: text/xml',
'Content-Length: ' . strlen($xmlRequest),
]);
$response = curl_exec($ch);
curl_close($ch);
// Antwort dekodieren
$result = xmlrpc_decode($response);
print_r($result);
Anfrage mit assoziativem Array (Struct)
<?php
// Struct-Parameter: Assoziatives Array wird als XML-RPC-struct kodiert
$params = [
'username' => 'admin',
'password' => 'geheim',
'filter' => ['post_type' => 'post', 'number' => 5],
];
$xml = xmlrpc_encode_request('wp.getPosts', $params, ['encoding' => 'UTF-8']);
echo $xml;
// Wichtig · Fallstricke
Deprecated seit PHP 8.0: Die gesamte xmlrpc_*-Funktionsfamilie ist ab PHP 8.0 als veraltet markiert und erzeugt entsprechende Deprecation-Warnungen. Für neue Projekte sollte die Composer-Bibliothek phpxmlrpc/phpxmlrpc verwendet werden.
Sicherheit: Die über $params übergebenen Daten werden zwar in XML kodiert, jedoch sollten Benutzereingaben grundsätzlich validiert und ggf. bereinigt werden, bevor sie in eine XML-RPC-Anfrage einfließen. Besondere Vorsicht ist bei der Weitergabe von Zugangsdaten geboten — diese sollten nie unverschlüsselt (d. h. ohne HTTPS) übertragen werden.
Zeichenkodierung: Standardmäßig wird iso-8859-1 verwendet. Für moderne Anwendungen empfiehlt sich die explizite Angabe von 'encoding' => 'UTF-8' in den output_options.