PHP integriert den Zugriff auf zwei Protokolle, XML-RPC und SOAP, die beide in der Erweiterung xmlrpc konzentriert sind. Darüber hinaus ist in PHPs PEAR, unabhängig davon, ob es sich um PHP 4 oder PHP 5 handelt, die XML-RPC-Erweiterung standardmäßig integriert. Diese Erweiterung hat nichts mit der xmlrpc-Erweiterung zu tun und kann die XML-RPC-Protokollinteraktion unabhängig implementieren Da es sich nicht um eine xmlrpc-Erweiterung handelt, wird empfohlen, die Erweiterung PEAR::XML-RPC zu verwenden.
Einführung in den Webdienst
Der Webdienst wurde für die Kommunikation heterogener Systeme entwickelt. Seine Grundidee besteht darin, mithilfe von XML-basierten HTTP-Remoteaufrufen einen Standardmechanismus bereitzustellen, wodurch die Einrichtung eines neuen Protokolls entfällt. Derzeit gibt es zwei Protokollstandards für die Webservice-Kommunikation: XML-RPC und SOAP. XML-RPC ist relativ einfach und erschien früher, während SOAP komplexer ist und hauptsächlich verwendet wird, wenn Stabilität, Robustheit, Sicherheit und komplexe Interaktionen erforderlich sind.
Hier verwenden wir hauptsächlich XML-RPC, um den Interaktionsprozess von Web Service kurz zu beschreiben. Für weitere Details wird empfohlen, das Handbuch zu lesen.
Installieren Sie die xmlrpc-Erweiterung.
Wenn die xmlrpc-PHP-Erweiterung nicht in Ihrem System installiert ist, installieren Sie sie bitte korrekt.
Unter der Windows-Plattform legen Sie zunächst die Erweiterung php_xmlrpc.dll im PHP-Installationsverzeichnis in das Verzeichnis C:Windows oder C:Winnt ab (die Erweiterung für PHP4 befindet sich im Verzeichnis C:phpextensions und die Erweiterung für PHP5). befindet sich im Verzeichnis C:phpext) und entfernen Sie das Semikolon „;“ vor extension=php_xmlrpc.dll in C:Windowsphp.ini oder C:Winntphp.ini, dann starten Sie den Webserver neu und prüfen phpinfo () Ob ein XML-RPC-Projekt vorhanden ist, kann feststellen, ob die xmlrpc-Erweiterung korrekt installiert wurde.
Wenn auf der Unix/Linux-Plattform die xmlrpc-Erweiterung nicht installiert ist, kompilieren Sie bitte PHP neu, fügen Sie bei der Konfiguration die Option --with-xmlrpc hinzu und überprüfen Sie dann phpinfo(), um festzustellen, ob xmlrpc normal installiert ist.
(Hinweis: Die folgenden Vorgänge basieren auf der normalen Installation der xmlrpc-Erweiterung. Bitte achten Sie auf die korrekte Installation.)
Funktionsprinzip von XML-RPC
XML-RPC bedeutet im Allgemeinen, dass der gesamte Prozess XML für die Kommunikation verwendet. Zunächst wird ein RPC-Server erstellt, um vom RPC-Client übergebene XML-gekapselte Anforderungen zu verarbeiten, und die Verarbeitungsergebnisse werden in Form von XML an den RPC-Client zurückgegeben. Anschließend analysiert der Client das XML, um die benötigten Daten zu erhalten.
Die Serverseite von XML-RPC muss über vorgefertigte Funktionen verfügen, die der Client aufrufen kann, und die Funktionen und Methoden in der vom Client übermittelten Anforderung müssen mit denen auf der Serverseite übereinstimmen, da sonst die erforderlichen Ergebnisse nicht erzielt werden.
Im Folgenden erstelle ich einfachen Code, um den gesamten Prozess zu beschreiben.
Der XML-RPC-Übungsserver
verwendet die Funktion xmlrpc_server_create, um einen Server zu generieren, registriert dann die RPC-Aufrufschnittstelle, die verfügbar gemacht werden muss, akzeptiert den XML-Daten-POST vom RPC-Client und verarbeitet ihn. Die Verarbeitungsergebnisse werden dem Client angezeigt in Form von XML.
Der Code lautet wie folgt: rpc_server.php
<?php
/**
* Funktion: Funktion, die vom RPC-Client aufgerufen werden soll
* Parameter:
* $method ist die Funktion, die der Client aufrufen muss
* $params ist das Parameterarray der Funktion, die der Client aufrufen muss.
* Rückgabe: Gibt das angegebene Aufrufergebnis zurück
*/
Funktion rpc_server_func($method, $params) {
$parameter = $params[0];
if ($parameter == "get"){
$return = ''Diese Daten durch Get-Methode'';
}anders{
$return = ''Keine Methode oder Parameter angeben'';
}
return $return;
}
//Erzeuge eine XML-RPC-Serverseite
$xmlrpc_server = xmlrpc_server_create();
//Registrieren Sie eine vom Server aufgerufene Methode rpc_server, die tatsächlich auf die Funktion rpc_server_func verweist
xmlrpc_server_register_method($xmlrpc_server, "rpc_server", "rpc_server_func");
//XML-Daten-POST vom Client akzeptieren
$request = $HTTP_RAW_POST_DATA;
//Erhalten Sie das Ausführungsergebnis nach der Ausführung der XML-Anfrage, die den Client aufruft
$xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null);
//Das Ergebnis nach der Funktionsverarbeitung im XML-Format ausgeben
header(''Content-Type: text/xml'');
echo $xmlrpc_response;
//Zerstöre serverseitige XML-RPC-Ressourcen
xmlrpc_server_destroy($xmlrpc_server);
?>
Nachdem die Serverseite erstellt wurde, erstellen wir unseren RPC-Client. Der Client greift ungefähr über Socket auf Port 80 des XML-RPC-Servers zu, kapselt dann die aufzurufende RPC-Schnittstelle in XML, sendet sie über eine POST-Anfrage an den RPC-Server und erhält schließlich das vom Server zurückgegebene Ergebnis.
Der Code lautet wie folgt: rpc_client.php
<?php
/**
* Funktion: Funktion, die dem Client zur Verfügung gestellt wird, um eine Verbindung zum XML-RPC-Server herzustellen
* Parameter:
* $host Der Host, der verbunden werden muss
* $port Port zur Verbindung mit dem Host
* $rpc_server serverseitige XML-RPC-Datei
* $request gekapselte XML-Anfrageinformationen
* Rückgabe: Wenn die Verbindung erfolgreich ist, werden die vom Server zurückgegebenen XML-Informationen zurückgegeben. Wenn die Verbindung erfolgreich ist, wird false zurückgegeben.
*/
function rpc_client_call($host, $port, $rpc_server, $request) {
//Öffnen Sie den angegebenen Server
$fp = fsockopen($host, $port);
//Konstruieren Sie die Abfrage-POST-Anforderungsinformationen des XML-RPC-Servers, der kommunizieren muss
$query = „POST $rpc_server HTTP/1.0nUser_Agent: XML-RPC ClientnHost: „.$host.“nContent-Type: text/xmlnContent-Length: „.strlen($request).“n n".$request."n";
//Sende das erstellte HTTP-Protokoll an den Server und gib false zurück, wenn es fehlschlägt.
if (!fputs($fp, $query, strlen($query))) {
$errstr = "Schreibfehler";
return false;
}
//Alle vom Server zurückgegebenen Informationen abrufen, einschließlich HTTP-Header und XML-Informationen
$contents = '''';
while (!feof($fp)){
$contents .= fgets($fp);
}
// Den erhaltenen Inhalt nach dem Schließen der Verbindungsressource zurückgeben
fclose($fp);
return $contents;
}
// Informationen zum Herstellen einer Verbindung zum RPC-Server erstellen
$host = ''localhost'';
$port = 80;
$rpc_server = ''/~heiyeluren/rpc_server.php'';
//Kodieren Sie die XML-Anfrage, die in XML gesendet werden muss. Die Methode, die aufgerufen werden muss, ist rpc_server, und der Parameter ist get.
$request = xmlrpc_encode_request(''rpc_server'', ''get'');
//Rufen Sie die Funktion rpc_client_call auf, um alle Anfragen an den XML-RPC-Server zu senden und die Informationen abzurufen
$response = rpc_client_call($host, $port, $rpc_server, $request);
//Analysieren Sie das vom Server zurückgegebene XML, entfernen Sie die HTTP-Header-Informationen und konvertieren Sie das XML in eine Zeichenfolge, die PHP erkennen kann
$split = ''<?xml version="1.0" binding="iso-8859-1"?>'';
$xml = explosion($split, $response);
$xml = $split . array_pop($xml);
$response = xmlrpc_decode($xml);
//Die vom RPC-Server erhaltenen Informationen ausgeben
print_r($response);
?>
Grob gesagt besteht unser obiges Beispiel darin, eine Methode namens rpc_server zu übermitteln, deren Parameter get ist, und dann die Rückgabe vom Server abzurufen. Die vom Server zurückgegebenen XML-Daten lauten:
<?xml version="1.0" binding=". iso-8859-1 "?>
<Methodenantwort>
<params>
<param>
<Wert>
<string>Diese Daten durch Get-Methode</string>
</value>
</param>
</params>
</methodResponse>
Dann kodieren wir dieses XML über die Funktion xmlrpc_decode in einen PHP-String und können es nach Belieben verarbeiten, und die gesamte Webdienst-Interaktion ist abgeschlossen.
Fazit
Ob XML-RPC oder SOAP: Solange es uns ermöglicht, Remote-Prozessaufrufe stabil und sicher durchzuführen und unser Projekt abzuschließen, wird der gesamte Webdienst erfolgreich sein. Wenn möglich, können Sie außerdem versuchen, XML-RPC in PEAR zu verwenden, um die oben genannten Vorgänge zu implementieren. Dies ist möglicherweise einfacher und geeigneter.
Verwenden Sie einfach XML-RPC für die Web-Service-Interaktion. Wenn Sie detaillierte Informationen erhalten möchten, wird empfohlen, das Handbuch zu lesen.
Dieser Artikel stammt aus dem ursprünglichen Link mit PHP-Informationen: http://www.phpchina.com/html/84/n-33884.html