PHP intègre l'accès à deux protocoles, XML-RPC et SOAP, tous deux concentrés dans l'extension xmlrpc. De plus, dans PEAR de PHP, qu'il s'agisse de PHP 4 ou PHP 5, l'extension XML-RPC a été intégrée par défaut, et cette extension n'a rien à voir avec l'extension xmlrpc et peut implémenter indépendamment l'interaction du protocole XML-RPC s'il y en a. n'est pas une extension XMLRPC, il est recommandé d'utiliser l'extension PEAR::XML-RPC.
Introduction au service Web
Web Service a été créé pour la communication de systèmes hétérogènes. Son idée de base est d'utiliser des appels distants HTTP basés sur XML pour fournir un mécanisme standard, éliminant ainsi le besoin d'établir un nouveau protocole. Actuellement, il existe deux normes de protocole pour la communication des services Web, l'une est XML-RPC et l'autre est SOAP. XML-RPC est relativement simple et est apparu plus tôt, tandis que SOAP est plus complexe et est principalement utilisé lorsque la stabilité, la robustesse, la sécurité et des interactions complexes sont requises.
Ici, nous utilisons principalement XML-RPC pour décrire brièvement le processus d'interaction du service Web. Une partie du contenu provient du manuel PHP. Pour plus de détails, il est recommandé de se référer au manuel.
Installez l'extension xmlrpc
Si l'extension php xmlrpc n'est pas installée sur votre système, veuillez l'installer correctement.
Sous la plateforme Windows, placez d'abord l'extension php_xmlrpc.dll du répertoire d'installation de PHP dans le répertoire C:Windows ou C:Winnt (l'extension pour PHP4 est dans le répertoire C:phpextensions, et l'extension pour PHP5 est dans le répertoire C:phpext), et supprimez le point-virgule ";" devant extension=php_xmlrpc.dll dans C:Windowsphp.ini ou C:Winntphp.ini, puis redémarrez le serveur web et vérifiez phpinfo () L'existence d'un projet XML-RPC peut déterminer si l'extension xmlrpc a été correctement installée.
Sous la plateforme Unix/Linux, si l'extension xmlrpc n'est pas installée, veuillez recompiler PHP, ajoutez l'option --with-xmlrpc lors de la configuration, puis vérifiez phpinfo() pour voir si xmlrpc est installé normalement.
(Remarque : les opérations suivantes sont basées sur l'installation normale de l'extension xmlrpc. Assurez-vous de l'installer correctement.)
Principe de fonctionnement de XML-RPC
XML-RPC signifie généralement que l'ensemble du processus utilise XML pour la communication. Tout d'abord, un serveur RPC est construit pour traiter les requêtes encapsulées XML transmises par le client RPC, et les résultats du traitement sont renvoyés au client RPC sous forme de XML. Le client analyse ensuite le XML pour obtenir les données dont il a besoin.
Le côté serveur de XML-RPC doit avoir des fonctions prêtes à l'emploi que le client peut appeler, et les fonctions et méthodes de la demande soumise par le client doivent être cohérentes avec celles du côté serveur, sinon les résultats requis ne seront pas obtenus.
Ci-dessous, je crée un code simple pour décrire l'ensemble du processus.
Le serveur de pratique XML-RPC
utilise la fonction xmlrpc_server_create pour générer un serveur, puis enregistre l'interface d'appel RPC qui doit être exposée, accepte les données XML POST du client RPC, puis les traite. Les résultats du traitement sont affichés au client. sous forme de XML.
Le code est le suivant : rpc_server.php
<?php
/**
* Fonction : fonction prévue pour être appelée par le client RPC
* Paramètres :
* $method est la fonction que le client doit appeler
* $params est le tableau de paramètres de la fonction que le client doit appeler.
* Retour : renvoie le résultat de l'appel spécifié
*/
fonction rpc_server_func($méthode, $params) {
$paramètre = $params[0];
si ($paramètre == "get"){
$return = ''Ces données par méthode get'';
}autre{
$return = ''Ne spécifiez pas la méthode ou les paramètres'';
}
retourner $revenir;
}
//Générer un côté serveur XML-RPC
$xmlrpc_server = xmlrpc_server_create();
//Enregistre une méthode rpc_server appelée par le serveur, qui pointe en fait vers la fonction rpc_server_func
xmlrpc_server_register_method($xmlrpc_server, "rpc_server", "rpc_server_func");
//Accepter les données XML POST du client
$request = $HTTP_RAW_POST_DATA;
//Récupère le résultat de l'exécution après avoir exécuté la requête XML appelant le client
$xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null);
//Sortie du résultat XML après le traitement de la fonction.
header(''Type de contenu : texte/xml'');
echo $xmlrpc_response;
//Détruire les ressources côté serveur XML-RPC
xmlrpc_server_destroy($xmlrpc_server);
?>
Une fois le côté serveur construit, construisons notre client RPC. Le client accède au port 80 du serveur XML-RPC via Socket, puis encapsule l'interface RPC qui doit être appelée en XML, la soumet au serveur RPC via une requête POST et obtient enfin le résultat renvoyé par le serveur.
Le code est le suivant : rpc_client.php
<?php
/**
* Fonction : Fonction fournie au client pour se connecter au serveur XML-RPC
* Paramètres :
* $host L'hôte qui doit être connecté
* Port $port pour se connecter à l'hôte
* $rpc_server Fichier côté serveur XML-RPC
* $request informations de requête XML encapsulées
* Retour : si la connexion réussit, les informations XML renvoyées par le serveur seront renvoyées. Si la connexion réussit, elle renverra false.
*/
function rpc_client_call($host, $port, $rpc_server, $request) {
//Ouvre le serveur spécifié
$fp = fsockopen($host, $port);
//Construit les informations de requête POST du serveur XML-RPC qui doit communiquer
$query = "POST $rpc_server HTTP/1.0nUser_Agent : XML-RPC ClientnHost : ".$host."nContent-Type : text/xmlnContent-Length : ".strlen($request)."n n".$request."n";
//Envoie le protocole HTTP construit au serveur et renvoie false en cas d'échec.
if (!fputs($fp, $query, strlen($query))) {
$errstr = "Erreur d'écriture" ;
renvoie faux ;
}
// Récupère toutes les informations renvoyées par le serveur, y compris les en-têtes HTTP et les informations XML
$contenu = '''';
tandis que (!feof($fp)){
$contents .= fgets($fp);
}
//Renvoie le contenu obtenu après la fermeture de la ressource de connexion
fclose($fp);
renvoie $contents ;
}
//Construire les informations pour se connecter au serveur RPC
$hôte = ''hôte local'';
$port = 80 ;
$rpc_server = ''/~heiyeluren/rpc_server.php'';
//Encoder la requête XML qui doit être envoyée en XML La méthode qui doit être appelée est rpc_server et le paramètre est get.
$request = xmlrpc_encode_request(''rpc_server'', ''get'');
//Appelez la fonction rpc_client_call pour envoyer toutes les requêtes au serveur XML-RPC et obtenir les informations
$response = rpc_client_call($host, $port, $rpc_server, $request);
//Analyse le XML renvoyé par le serveur, supprime les informations d'en-tête HTTP et convertit le XML en une chaîne que PHP peut reconnaître
$split = ''<?xml version="1.0" encoding="iso-8859-1"?>'';
$xml = exploser($split, $response);
$xml = $split . array_pop($xml);
$response = xmlrpc_decode($xml);
//Afficher les informations obtenues depuis le serveur RPC
print_r($réponse);
?>
En gros, notre exemple ci-dessus consiste à soumettre une méthode appelée rpc_server, le paramètre est get, puis à obtenir le retour du serveur. Les données XML renvoyées par le serveur sont :
<?xml version="1.0" encoding=". iso-8859-1 "?>
<réponseméthode>
<paramètres>
<param>
<valeur>
<string>Ces données par méthode get</string>
</valeur>
</param>
</params>
</methodResponse>
Ensuite, nous encodons ce XML dans une chaîne PHP via la fonction xmlrpc_decode, et nous pouvons le traiter à volonté, et toute l'interaction du service Web est terminée.
Conclusion
Qu'il s'agisse de XML-RPC ou de SOAP, tant que cela nous permet d'effectuer des appels de processus à distance de manière stable et sûre et de terminer notre projet, alors l'ensemble du service Web sera couronné de succès. De plus, si possible, vous pouvez également essayer d'utiliser XML-RPC dans PEAR pour implémenter les opérations similaires ci-dessus. Cela peut être plus simple et plus adapté pour vous.
Utilisez simplement XML-RPC pour l'interaction du service Web. Pour certains codes, veuillez vous référer au manuel PHP. Si vous souhaitez obtenir des informations détaillées, il est recommandé de vous référer au manuel. Si l'article est incorrect, veuillez me corriger.
Cet article provient du lien original d'informations PHP : http://www.phpchina.com/html/84/n-33884.html