Start · Sprachen · PHP · Referenz · xmlrpc_server_register_introspection_callback

xmlrpc_server_register_introspection_callback

Funktion

Registriert eine PHP-Callback-Funktion, die beim Introspektionsaufruf eines XML-RPC-Servers zur Dokumentationserzeugung verwendet wird.

seit PHP 4.1.0 Kategorie: xml

Signatur

xmlrpc_server_register_introspection_callback(resource $server, string $function): bool

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

Typ
bool
Beschreibung
Gibt 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);
Introspektions-Callback erfolgreich registriert.

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);
Beide Introspektions-Callbacks registriert.

// 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.