Bonjour à tous,
Je requiers votre aide, car j'ai besoin de trouver rapidement une réponse à "Comment configurer Easyphp pour implémenter des Webservices à l'aide de SOAP et PHP5 ?"
Ce que j'ai fait jusqu'à présent :
- télécharger un petit exemple de webservice sur le net pour voir comment cela fonctionne.
- déposer l'ensemble dans un dossier ./webservice-exemple, dans le dossier ./www d'Easyphp
- le dossier contient 3 fichiers, index.php, test.php, serveur.wsdl, qui sont respectivement, la page de définition et de présentation des services du serveur, la page d'appel client, et la description WSDL des services.
- appeler dans le navigateur, l'URL http://127.0.0.1/webservice-exemple/index.php
>> donnait : "HTTP 500 erreur interne au serveur" après que j'ai décommenté "extension=php_soap.dll" dans php.ini, comme j'ai lu que SOAP était intégré à PHP5 (et redemarré le serveur bien-entendu), avant j'avais un appel à la lib SoapServer qui ne fonctionnait pas
>> donne après modification de la ligne de déclaration du serveur en
$server = new SoapServer("http://127.0.0.1/webservice-exemple/server.wsdl");
l'erreur :
SOAP-ENV:ServerBad Request. Can't find HTTP_RAW_POST_DATA
- appeler dans le navigateur, l'URL http://127.0.0.1/webservice-exemple/test.php
>> donne :
1 2 3 4 5 6
| Fatal error: Uncaught SoapFault exception:
[HTTP] Unable to parse URL in C:\Program Files\EasyPHP 2.0b1\www\webservice-exemple\test.php:3
Stack trace:
#0 [internal function]: SoapClient->__doRequest('<?xml version="...', '', 'urn:MonWebServi...', 1, 0)
#1 C:\Program Files\EasyPHP 2.0b1\www\webservice-exemple\test.php(3): SoapClient->__call('hello', Array)
#2 {main} thrown in C:\Program Files\EasyPHP 2.0b1\www\webservice-exemple\test.php on line 3 |
Les 3 fichiers d'exemple :
- index.php (serveur) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| <?php
class MonWebService
{
function MonWebService()
{
}
/**
* Dis bonjour...
* @param string $qui
* @return string
*/
function hello($qui)
{
return utf8_encode("Bonjour à toi : ".$qui);
}
}
$server = new SoapServer("server.wsdl");
$server->setClass("MonWebService");
$server->handle();
print "Ce web service MonWebService contient les méthodes suivantes :<br><ul>";
$aFuncs = $server->getFunctions();
for($i=0;$i<sizeof($aFuncs);$i++)
{
print("<li>".$aFuncs[$i]."</li>");
}
print "</ul>";
?> |
- test.php (client) :
1 2 3 4 5 6
| <?php
//$client = new SoapClient("server.wsdl");
$client = new SoapClient("http://127.0.0.1/webservice-exemple/server.wsdl");
$ret = $client->__call("hello",array('steph'));
print $ret;
?> |
>> J'ai aussi testé la version commenté de ce code, même résultat.
- server.wsdl (fichier de description WSDL) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| <?xml version='1.0' encoding='UTF-8'?>
<!-- WSDL file generated by Zend Studio. -->
<definitions name="server" targetNamespace="urn:server" xmlns:typens="urn:server" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/">
<message name="hello">
<part name="qui" type="xsd:string"/>
</message>
<message name="helloResponse">
<part name="helloReturn" type="xsd:string"/>
</message>
<portType name="MonWebServicePortType">
<operation name="hello">
<documentation>
Dis bonjour...
</documentation>
<input message="typens:hello"/>
<output message="typens:helloResponse"/>
</operation>
</portType>
<binding name="MonWebServiceBinding" type="typens:MonWebServicePortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="hello">
<soap:operation soapAction="urn:MonWebServiceAction"/>
<input>
<soap:body namespace="urn:server" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body namespace="urn:server" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service name="serverService">
<port name="MonWebServicePort" binding="typens:MonWebServiceBinding">
<soap:address location=""/>
</port>
</service>
</definitions> |
A priori, le WSDL émane de Zend Studio, donc la conf que j'utilise pour le faire tourner, n'est peut-être pas optimale, mais les contraintes que j'ai, font que je dois me contenter d'easyphp (v2.0.0.0) pour le moment.
J'ai peut-être aussi fait des boulettes, je ne suis pas exempt d'imperfections. Donc je fais appel à votre aiiiiiiiide.
Merci d'avance.
Keev
Partager