Signatur
Beschreibung
xmlrpc_server_register_introspection_callback bindet eine benutzerdefinierte PHP-Funktion an einen XML-RPC-Server-Ressource, die aufgerufen wird, wenn ein XML-RPC-Client eine Introspektionsanfrage (system.describeMethods) stellt. Die Callback-Funktion soll dabei eine XML-Struktur zurückgeben, die die verfügbaren Methoden, ihre Parameter und Rückgabewerte beschreibt.
Introspection ist ein optionales Feature des XML-RPC-Protokolls, das es Clients ermöglicht, die API eines Servers zur Laufzeit zu erkunden. Die registrierte Callback-Funktion muss einen XML-String zurückgeben, der dem XML-RPC-Introspektionsformat entspricht – typischerweise ein <methodList>-Dokument mit <methodDescription>-Elementen für jede Methode.
Diese Funktion ist besonders nützlich, wenn man einen selbstdokumentierenden XML-RPC-Server bauen möchte, dessen API-Beschreibung dynamisch erzeugt wird – etwa aus Datenbankeinträgen, Docblock-Kommentaren oder Konfigurationsdateien.
Hinweis: Die gesamte xmlrpc_*-Erweiterung ist seit PHP 8.0 als experimentell/deprecated eingestuft und sollte in neuen Projekten nicht mehr eingesetzt werden. Stattdessen empfiehlt sich die Verwendung moderner XML-RPC-Bibliotheken wie phpxmlrpc/phpxmlrpc.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $server Pflicht | resource | Eine XML-RPC-Server-Ressource, die zuvor mit xmlrpc_server_create() erzeugt wurde. |
|
| $function Pflicht | string | Name der PHP-Funktion, die bei einer Introspektionsanfrage aufgerufen werden soll. Die Funktion muss einen XML-String zurückgeben, der die Methodenbeschreibungen im XML-RPC-Introspektionsformat enthält. |
Rückgabewert
true bei Erfolg zurück, false wenn die Registrierung fehlschlug – etwa weil die angegebene Funktion nicht existiert oder der Server-Parameter ungültig ist.Beispiele
Einfacher XML-RPC-Server mit Introspektions-Callback
<?php
// Introspektions-Callback-Funktion definieren
function my_introspection_callback() {
return '
<methodList>
<methodDescription name="greet.hello">
<purpose>Gibt eine Begrüßung zurück.</purpose>
<signatures>
<signature>
<returnType><string/></returnType>
<params>
<value><string>name</string></value>
</params>
</signature>
</signatures>
</methodDescription>
</methodList>';
}
// Die eigentliche Methode registrieren
function greet_hello($method, $params) {
$name = isset($params[0]) ? $params[0] : 'Welt';
return 'Hallo, ' . $name . '!';
}
// Server erzeugen
$server = xmlrpc_server_create();
// Methode registrieren
xmlrpc_server_register_method($server, 'greet.hello', 'greet_hello');
// Introspektions-Callback registrieren
$result = xmlrpc_server_register_introspection_callback($server, 'my_introspection_callback');
if ($result) {
echo 'Introspektions-Callback erfolgreich registriert.' . PHP_EOL;
} else {
echo 'Fehler bei der Registrierung.' . PHP_EOL;
}
// Eingehende Anfrage verarbeiten
$request = file_get_contents('php://input');
if (!empty($request)) {
$response = xmlrpc_server_call_method($server, $request, null);
header('Content-Type: text/xml');
echo $response;
}
xmlrpc_server_destroy($server);
Mehrere Introspektions-Callbacks kombinieren
<?php
// Ersten Callback für Basis-Methoden
function introspect_base_methods() {
return '
<methodList>
<methodDescription name="system.ping">
<purpose>Prüft, ob der Server erreichbar ist.</purpose>
</methodDescription>
</methodList>';
}
// Zweiten Callback für erweiterte Methoden
function introspect_extended_methods() {
return '
<methodList>
<methodDescription name="data.fetch">
<purpose>Ruft Datensätze vom Server ab.</purpose>
</methodDescription>
</methodList>';
}
$server = xmlrpc_server_create();
// Beide Callbacks registrieren – beide werden bei Introspektionsanfragen aufgerufen
xmlrpc_server_register_introspection_callback($server, 'introspect_base_methods');
xmlrpc_server_register_introspection_callback($server, 'introspect_extended_methods');
echo 'Beide Introspektions-Callbacks registriert.' . PHP_EOL;
xmlrpc_server_destroy($server);
// Wichtig · Fallstricke
Deprecation: Die xmlrpc_*-Erweiterung ist in PHP als experimentell markiert und wird nicht aktiv weiterentwickelt. Ab PHP 8.0 gelten diese Funktionen als veraltet. Für neue Projekte sollten alternative Bibliotheken wie phpxmlrpc/phpxmlrpc genutzt werden.
Sicherheit: Der von der Introspektions-Callback-Funktion zurückgegebene XML-String sollte keine unvalidierten Benutzerdaten enthalten, da dies zu XML-Injection führen kann. Alle dynamisch eingefügten Werte müssen mit htmlspecialchars() oder einer äquivalenten Escapingfunktion gesichert werden.
Rückgabe-Format: Der zurückgegebene XML-String muss dem XML-RPC-Introspektionsschema entsprechen. Ein fehlerhaft strukturiertes XML kann dazu führen, dass Clients keine oder fehlerhafte Methodenbeschreibungen erhalten, ohne dass PHP einen Fehler wirft.