Bonjour,
Je tente depuis 2 jours de faire tourner un bête script de web service, mais je suis confronté à un pb vraiment bizzare.
(note: mon script tourne sous PHP 5.2.2 et Apache 2.0.59 )
Voici mon code:
"service.php"
"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 <?php class HelloService { function hello($name) { return "Hello ".$name." !"; } } $server = new SoapServer(null, array('uri' => 'http://localhost/service/service.php', 'location' => 'http://localhost/service/service.php')); $server->setClass("HelloService"); $server->handle(); ?>
lorsque je lance la page client.php j'obtiens l'erreur suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <?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")); ?>
En gros il trouve pas la variable HTTP_RAW_POST_DATA.SoapFault exception: [SOAP-ENV:Server] Bad Request. Can't find HTTP_RAW_POST_DATA 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}
Maintenant, si dans service.php je met cette ligne de code
juste avant le handle....ça marche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $HTTP_RAW_POST_DATA = file_get_contents('php://input');
J'obtiens bien 'Hello dietrich' dans IE.
Toutefois ce n'est pas normal de devoir ajouter cette ligne pour que mon code fonctionne.
Alors, evidement j'ai activé 'always_populate_raw_post_data = On' dans le fichier php.ini, mais rien n'y fait, ça ne fonctionne toujours pas.
Est ce que quelqu'un aurait une idée de la nature de ce pb ?
Partager