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"
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(); 
?>
"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
 
<?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"));
?>
lorsque je lance la page client.php j'obtiens l'erreur suivante:
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}
En gros il trouve pas la variable HTTP_RAW_POST_DATA.

Maintenant, si dans service.php je met cette ligne de code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
$HTTP_RAW_POST_DATA = file_get_contents('php://input');
juste avant le handle....ça marche.
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 ?