[Web Service][SOAP] génération WSDl à la volée par PHP
Hello,
J'ai un web service PHP 5 qui fonctionne nickel en loadant un fichier.wsdl se trouvant dans le même répertoire.
Exemple :
Code:
1 2
|
$server = new SoapServer('.fichier.wsdl', array('trace' => 1, 'soap_version' => SOAP_1_1)); |
Le problème est que dans mon WSDL, l'url d'accès au webservice est en dur :
Extrait de mon fichier.wsdl :
Code:
1 2 3 4 5 6 7
|
<service name="WebServiceKaboume">
<documentation>version 1.0</documentation>
<port name="KABOUME_Port" binding="tns:KABOUME_Binding">
<soap:address location="http://localhost/webservice/webService.php"/>
</port>
</service> |
Quand je passe ce code sur une machine de production, cela ne fonctionne plus car l'url dans soap:adress n'est plus la même (nom de domaine change et surtout l'arborescence n'est pas la même).
Donc j'ai pensé généré le WSDL à la volée par PHP à partir d'un template de wsdl. A la volée PHP remplacerait l'URL de soap:address par la bonne URL récupérée via une fonction de ce type :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
public static function get_url($bShowFileName = true,$bShowQueryString = true,$bShowPort = false)
{
if(isset($_SERVER['HTTPS']))
{$sUrl = 'https://';}
else
{$sUrl = 'http://';}
$sUrl .= $_SERVER['HTTP_HOST'];
if($bShowPort)
{$sUrl .= ':' . $_SERVER['SERVER_PORT'];}
if ($bShowFileName)
{$sUrl .= $_SERVER['SCRIPT_NAME'];}
else
{$sUrl .= dirname($_SERVER['SCRIPT_NAME'])."/";}
if( ($_SERVER['QUERY_STRING'] != null) && ($bShowQueryString) )
{$sUrl .= '?' . $_SERVER['QUERY_STRING'];}
return $sUrl;
} |
Le problème est l'instanciation su serveur soap se fait à partir d'un fichier physique ($server = new SoapServer('.fichier.wsdl',) donc comment faire en sorte pour qu'il pointe vers le template wsdl modifié à la volée ?
Qu'en pensez-vous ? Avez-vous déjà rencontré cette problématique ?
kaboume.