PEAR::SOAP

まるごとPHP vol.1」で紹介されていたPEARSOAPライブラリ。自分はNuSOAPを使ってきて、PEARのものは知らなかった。中を見てみるとNuSOAPをPEARに持ってきたもののようでOriginal AuthorはNuSOAPの人になっている。ただ、NuSOAPの方はNuSOAPとして開発は継続されている。逆にPEAR::SOAPの最新版が0.8RC3=>2004-01月で、NuSOAP 0.6.7=>2004-05の方が新しく活動が活発な印象を受ける。
試しに使ってみると

  • クライアントがPEAR::SOAP→サーバがNuSOAP→OK(当たり前?)
  • クライアントがPEAR::SOAP→サーバがAxis→OK(NuSOAPでもつながっていたし)
  • NuSOAPでは復帰値は連想配列だったが、PEAR::SOAPではstdClassのObjectになっているようだった。といってもその中は連想配列だからあまり変わらないみたいだ。
  • 添付ファイルでMIMEDIMEにも対応しているようだ。
  • エンコーディングは実質UTF-8のみ。NuSOAPの場合にはShift_JISも指定しようと思えばできた(ただレスポンス中の日本語は化けた)。UTF-8を使っていれば日本語もOKのようだ。
  • デバッグ用にHTTPのトレースを出力したい場合にはオプションに「'trace' => 1」を指定してから、「$soapclient->__get_wire()」で参照する。
require_once("SOAP/Client.php");

$soapclient = new SOAP_Client('myservice.wsdl');

// 必要なら文字コードをUTF-8にしておく。
$text = mb_convert_encoding($text, 'UTF-8', 'Shift_JIS');

$parameters = array(
    'param1' => "value1",
    'param2' => "value2",
    'param3' => $text,
);

$options = array(
    'namespace' => 'urn:myservice_namespace',
    'trace' => 1,
);

$ret = $soapclient->call("method_name", $parameters, $options);

if (PEAR::isError($ret))
{
    print("Error: " . $ret->getMessage() . "<br>\n");
    print $soapclient->__get_wire();echo "<br>\n";
}
else
{
    print("Success: ");
    var_dump($ret);
    print("<br>\n");
}