IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[Web Service][SOAP] SOAP et PHP 5


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut [Web Service][SOAP] SOAP et PHP 5
    Bonjour,

    J'essaye désespérément de faire fonctionner un bête exemple de web service en utilisant l'extension SOAP de PHP 5 mais je ne m'en sors pas.
    Voici mon code

    "service.php"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php 
     
      class HelloService { 
      function hello($name) { 
        return "Hello $name !"; 
        } 
      } 
     
      $server = new SoapServer(null, array('uri' => 'http://localhost/service/service.php')); 
      $server->setClass("HelloService"); 
      $server->handle(); 
    ?>
    "client.php"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php 
      $client = new SoapClient(null, array('uri' => 'http://localhost/service/service.php')); 
      print($client->hello("dietrich")); 
    ?>
    lorsque je charge la page client.php avec IE, j'obtiens l'erreur suivante:
    Citation:
    Fatal error: Uncaught SoapFault exception: [Client] SoapClient::SoapClient() [<a href='function.SoapClient-SoapClient'>function.SoapClient-SoapClient</a>]: 'location' option is requred in nonWSDL mode in D:\myweb\client\client.php:2 Stack trace: #0 D:\myweb\client\client.php(2): SoapClient->SoapClient(NULL, Array) #1 {main} thrown in D:\myweb\client\client.php on line 2
    Est ce que quelqu'un pourrait m'aider à démêler tout ça ?


    Merci d'avance

  2. #2
    Membre averti Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Points : 378
    Points
    378
    Par défaut
    Je travaille dessus en ce moment aussi...

    En fait dans tes arguments pour créer tes Client/Server l'URI ne sert pas à grand chose si ce n'est identifié le webservices (tu peux y mettre tartempion ca le dérangera pas )

    Par contre quand tu crée ton client tu dois rajouter dans ton array le champ "location" qui indique l'adresse du web services donc ca donnera quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php 
      $client = new SoapClient(null, array(
    'uri' => 'http://localhost/service/service.php',
    'location' => 'http://localhost/service/service.php'
    )); 
      print($client->hello("dietrich")); 
    ?>
    Such is the situation in our Fallen Galaxy

  3. #3
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Merci beaucoup pour ton aide

    Aprés correction j'ai l'erreur :

    Fatal error: Uncaught SoapFault exception: [SOAP-ENV:Server] SoapServer::handle() [<a href='function.SoapServer-handle'>function.SoapServer-handle</a>]: PHP-SOAP requires 'always_populate_raw_post_data' to be on please check your php.ini file in D:\myweb\client\client.php:5 Stack trace: #0 [internal function]: SoapClient->__call('hello', Array) #1 D:\myweb\client\client.php(5): SoapClient->hello('dietrich') #2 {main} thrown in D:\myweb\client\client.php on line 5
    j'ai rajouté la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $server->service($HTTP_RAW_POST_DATA);
    dans le fichier service.php

    Et maintenant j'ai l'erreur suivante:
    Fatal error: Uncaught SoapFault exception: [Client] looks like we got no XML document in D:\myweb\client\client.php:5 Stack trace: #0 [internal function]: SoapClient->__call('hello', Array) #1 D:\myweb\client\client.php(5): SoapClient->hello('dietrich') #2 {main} thrown in D:\myweb\client\client.php on line 5
    Quelqu'un aurait-il une idée du pb ?

  4. #4
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Bonjour

    Quand tu as ce genre de réponse 'Looks like we got no XML...' ca signifie que tu as une erreur coté serveur et que du coup ton client ne recoit pas la réponse attendue.

    Une chose utile est d'utiliser le mode trace quand tu debug.

    Ajoutes ca a ton array():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <?php 
    $client = new SoapClient
          (
          null, 
          array
                (
                'uri' => 'http://localhost/service/service.php',
                'location' => 'http://localhost/service/service.php'
                'trace'      => 1,
    	    'exceptions' => 0,
                )
          ); 
    print($client->hello("dietrich")); 
    // Ajoutes des infos sur l'erreur :
    echo "<pre>\n";
    // Retourne la requete envoyée au serveur
    echo "Request :\n".htmlspecialchars($client ->__getLastRequest()) ."\n";
    // Retourne la vraie réponse construite sur le serveur 
    //(souvent le message d'erreur produit dans le script du serveur 
    //que tu ne voies pas)
    echo "Response:\n".htmlspecialchars($client ->__getLastResponse())."\n";
    echo "</pre>"; 
    ?>

  5. #5
    Membre averti Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Points : 378
    Points
    378
    Par défaut
    Alors cette erreur retient là parce que tu risque de la rencontré trèèèèès souvent

    Quand il te dit que ton résultat n'est pas formaté selon le XML c'est qu'en général il y a eu : soit un echo fait sur la page du serveur (dans ce cas effectivmeent ce n'est pas du xml valide), soit une erreur php qui a été affiché et donc la page n'affiche plus du XML.

    Dans les deux cas va directement sur la page de ton serveur pour voir eventuellemnt les erreurs commises. Quand le serveur est bon normalement il t'affiche une page xml.
    Such is the situation in our Fallen Galaxy

  6. #6
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Merci à tous, ça se précise

    j'ai viré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $server->service($HTTP_RAW_POST_DATA);
    car apparement 'service' est lié à NuSoap
    j'ai activé la ligne: 'always_populate_raw_post_data = On' dans php.ini

    et maintenant l'erreur c'est :
    Bad Request. Can't find HTTP_RAW_POST_DATA
    Est ce qu'il faut que je passe la variable HTTP_RAW_POST_DATA via le serveur ?
    Y a t-il une fonction pour ça ?

  7. #7
    Membre averti Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Points : 378
    Points
    378
    Par défaut
    Dans quel cas tu obtient cette erreur?

    Si c'est en ouvrant le serveur c'est normal.... parce qu'il ne recoit pas les information venant d'un client. Donc a partir de la il faut ouvrir ton client pour voir si ca marche.

    Par contre si ca te fais ca en ouvrant le client c'est bizar
    Such is the situation in our Fallen Galaxy

  8. #8
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    J'ai testé ton code chez moi comme ca

    directement dans mon www, le fichier service.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php 
     
      class HelloService { 
      function hello($name) { 
        return "Hello $name !"; 
        } 
      } 
     
      $server = new SoapServer(null, array('uri' => 'http://localhost/service/service.php')); 
      $server->setClass("HelloService"); 
      $server->handle(); 
    ?>
    Au meme endroit le client.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <?php 
    $client = new SoapClient
          (
          null, 
          array
                (
                'uri' 			=> 'http://localhost/service.php',
                'location' 		=> 'http://localhost/service.php',
                'trace'      	=> 1,
    			'exceptions' 	=> 0,
                )
          ); 
    print($client->hello("dietrich")); 
    // Ajoutes des infos sur l'erreur :
    echo "<pre>\n";
    // Retourne la requete envoyée au serveur
    echo "Request :\n".htmlspecialchars($client ->__getLastRequest()) ."\n";
    // Retourne la vraie réponse construite sur le serveur 
    //(souvent le message d'erreur produit dans le script du serveur 
    //que tu ne voies pas)
    echo "Response:\n".htmlspecialchars($client ->__getLastResponse())."\n";
    echo "</pre>"; 
    ?>
    En sortie je recois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Hello dietrich !
     
    Request :
    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://localhost/service.php" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:hello><param0 xsi:type="xsd:string">dietrich</param0></ns1:hello></SOAP-ENV:Body></SOAP-ENV:Envelope>
     
    Response:
    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://localhost/service/service.php" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:helloResponse><return xsi:type="xsd:string">Hello dietrich !</return></ns1:helloResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>

  9. #9
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Non, c'est bien en ouvrant le client (cad je charge la page client.php dans IE) que j'ai cette erreur

  10. #10
    Membre averti Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Points : 378
    Points
    378
    Par défaut
    Tu peux remettre tes deux pages?
    Such is the situation in our Fallen Galaxy

  11. #11
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Ok, voilà :

    "service.php"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php 
     
      class HelloService { 
      function hello($name) { 
        return "Hello $name !"; 
        } 
      } 
     
      $server = new SoapServer(null, array('uri' => 'http://localhost/service/service.php')); 
      $server->setClass("HelloService"); 
      $server->handle(); 
    ?>
    "client.php"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <?php
    $client = new SoapClient
          (
          null, 
          array
                (
                'uri' => 'http://localhost/service/service.php',
                'location' => 'http://localhost/service/service.php', 
                'trace' => 1,
    	          'exceptions' => 0)); 
    print($client->hello("dietrich")); 
    // Ajoutes des infos sur l'erreur :
    echo "<pre>\n";
    // Retourne la requete envoyée au serveur
    echo "Request :\n".htmlspecialchars($client ->__getLastRequest()) ."\n";
    // Retourne la vraie réponse construite sur le serveur 
    //(souvent le message d'erreur produit dans le script du serveur 
    //que tu ne voies pas)
    echo "Response:\n".htmlspecialchars($client ->__getLastResponse())."\n";
    echo "</pre>"; 
    ?>

  12. #12
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Tu as bien redémarré ton serveur apache apres avoir changé le php.ini?

    Sinon essaie d'enlever les fonctions que je t'ai fait rajouter (entre les <pre>) histoire de voir si ca n'est pas la cause d'une erreur chez toi.

  13. #13
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Tu as bien redémarré ton serveur apache apres avoir changé le php.ini?
    Oui, plusieurs fois même pour être sûr.
    Sinon essaie d'enlever les fonctions que je t'ai fait rajouter (entre les <pre>) histoire de voir si ca n'est pas la cause d'une erreur chez toi.
    J'ai essayé et j'ai le message suivant :
    SoapFault exception: [Client] looks like we got no XML document in D:\myweb\client\client.php:11 Stack trace: #0 [internal function]: SoapClient->__call('hello', Array) #1 D:\myweb\client\client.php(11): SoapClient->hello('dietrich') #2 {main}
    'comprend pas

  14. #14
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Une dernière possibilité

    Mes premières erreurs avec les webservices venaient d'un truc tout bete, j'avais laissé des trucs avant le <?php ou apres le ?> comme un espace, un saut de ligne etc...
    Ca causait des erreurs à propos des headers, est-ce que tu n'as pas ce genre de chose dans le script de ton service??

  15. #15
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Dans le fichier service.php le "<php" commence sur la 2eme ligne. Je l'ai mis sur la 1ere mais ça change rien
    Est ce que ça pourrait venir de ma version de Apache (2.0.59) ?

  16. #16
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Non j'ai la meme version d'Apache que toi justement, tu as quelle version de php?

  17. #17
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Php 5.2.2

  18. #18
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Bon ben on a la meme version d'Apache et de php, chez moi ton code marche très bien.

    Tes deux fichiers se trouvent bien dans ../www/service/ ?

    Coté serveur, essaie d'écrire dans un fichier des infos pour savoir à quel niveau tu arrives

    Avant le handle écrit ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ob_start();
    echo "Request : \n";
    print_r($HTTP_RAW_POST_DATA);
    file_put_contents("./aaa.txt", ob_get_contents(), FILE_APPEND);
    ob_end_clean();
    pareil dans la fonction hello, essaie d'écrire dans le fichier "j'entre dans ma fonction", puis apres le handle "j'en sors" pour comprendre...

  19. #19
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Tes deux fichiers se trouvent bien dans ../www/service/ ?
    client.php se trouve dans : 'http://localhost/client/client.php'
    et service.php se trouve dans : 'http://localhost/service/service.php'
    mais je ne pense pas que ça change grand chose.
    Toutefois, j'ai mis client.php dans 'http://localhost/service' puis je l'ai chargé dans IE à partir de là, mais le résultat est le même.

    J'ai mis ton code juste avant le handle. Il me génère le fichier aaa.txt dans lequel il est écrit: Request : et puis c'est tout.
    On dirait que la variable $HTTP_RAW_POST_DAT est vide.

    Je comprend plus rien là!

  20. #20
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Bon au moins on sait d'ou vient l'erreur. Tu as un probleme avec ton HTTP_RAW_POST_DATA.

    PErsonnellement dans mon php.ini je n'ai pas eu besoin de mettre le always_populate_raw_post_data à On c'est toujours commenté.

    Mais as-tu modifié le bon php.ini ? celui dans Apache2/bin, parce qu'il y en a plusieurs sur la machine en général et un seul est valide

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Web Service] paramétrer mon web service soap sous php
    Par yanis3021 dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 05/11/2014, 16h01
  2. Appeler un web service SOAP en php avec un client JavaScript
    Par lord.66 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 05/06/2009, 14h04
  3. Appeler un web service SOAP en php avec un client JavaScript
    Par lord.66 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 31/05/2009, 12h42
  4. [Web Service][SOAP] Tableau php et type complexe ?
    Par tintin72 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 18/06/2007, 11h31
  5. [Web Service][SOAP] PHP NuSOAP
    Par ssebuser dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 16/05/2006, 14h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo