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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé 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
    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 chevronné Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    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")); 
    ?>

  3. #3
    Membre éclairé 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
    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 chevronné Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    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.

  5. #5
    Membre éclairé 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
    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 ?

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

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    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

  7. #7
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    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...

  8. #8
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2004
    Messages : 20
    Par défaut
    Citation Envoyé par Asmodean Voir le message
    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.
    Alors toi t'es un bon : Merci !

    Mon addClass() n'existait pas -Merci la documentation Oracle-, je l'ai changé en setClass() : mon serveur a fonctionné et hop plus d'erreur dans le client.

  9. #9
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 2
    Par défaut
    Bonjour à tous!

    Je sais que le topic date un peu... mais j'ai rencontré un problème similaire concernant la mise en place de mon WebService.

    J'ai aussi une erreur du même type :[B]"Fatal error: Uncaught SoapFault exception: [Client] looks like we got no XML document in C:\wamp\www\WebService\soap-client.php:6 Stack trace: #0 [internal function]: SoapClient->__call('getScript_extra...', Array) #1 C:\wamp\www\WebService\soap-client.php(6): SoapClient->getScript_extraction('jyg') #2 {main} thrown in C:\wamp\www\WebService\soap-client.php on line 6"[B]

    J'ai alors suivi vos réponses, et j'ai donc ajouté le code pour réaliser un fichier aaa.txt, pour voir d'ou venait l'erreur.

    Dans mon fichier .txt, il y a noté :"Request :
    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:localhost-extracteur" 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:getScript_extraction>
    <TypeFichier xsi:type="xsd:int">0</TypeFichier><Civilite xsi:nil="true"/><Formations xsi:nil="true"/><Experiences xsi:nil="true"/></ns1:getScript_extraction></SOAP-ENV:Body></SOAP-ENV:Envelope>
    Request :
    <br />
    <b>Notice</b>: Undefined variable: HTTP_RAW_POST_DATA in <b>C:\wamp\www\WebService\soap-server.php</b> on line <b>11</b><br />
    "

    L'un d'entre vous aurait-il une idée quant à une éventuelle solution?
    Merci d'avance!

  10. #10
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    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>"; 
    ?>

+ Répondre à la discussion
Cette discussion est résolue.

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