Start · Sprachen · PHP · Referenz · xmlrpc_encode_request

xmlrpc_encode_request

Funktion

Erzeugt einen XML-RPC-konformen XML-String für eine Methodenanfrage (<code>methodCall</code>).

seit PHP 4.1.0 Kategorie: xml

Signatur

xmlrpc_encode_request(string $method, mixed $params, array $output_options = []): string

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

Typ
string
Beschreibung
Gibt einen XML-String zurück, der die vollständige XML-RPC-<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 version="1.0" encoding="iso-8859-1"?> <methodCall> <methodName>system.listMethods</methodName> <params/> </methodCall>

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.