PHPでSOAP

PHPSOAPを使ってみようと思ったんだけど、SOAPが全然わかってなかったので、
ちょっと勉強してみた。
ちなみに環境は、LINUX鯖だよ。

■そもそもSOAPってなんぞや
SOAPっていうと個人的には本番ができるR18のところってイメージがある。。。
って、風俗的なソープじゃなくて、プロトコルのお話。

    • -

Wikiより引用
SOAPは拡張可能で分散的なフレームワークであり、HTTPやSMTPなど様々なコンピュータネットワークの通信プロトコルで利用することができる。
いくつかのSOAPメッセージを相互作用させることによってリモートプロシージャコールが実現できる。SOAPWebサービスに有効な手段の一つである。
SOAPXMLに基づいており、XMLの、ヘッダとボディを組み合わせるデザインパターンで設計されている。「ヘッダ」は、オプショナルであり、ルーティングやセキュリティ、そして トランザクションなどのための情報といったメタ情報を格納できる。「ボディ」部分は、主要な情報、別の言い方をすればペイロードと呼ばれるものである。SOAPペイロードXML Schema規定することができる。

    • -

まぁ、簡単に使い道を言うと仕様に沿ったXMLSOAPクライアント側が、SOAPサーバーにリクエストすると
仕様に沿ったXMLを返事してくれるってこと。
XMLとHTTPなどをベースとした、他のコンピュータにあるデータやサービスを呼び出すためのプロトコルって感じ。

PHPでのSOAPの利用
PHPSOAPを使うにあたってまず、環境がどうだかチェック。
PHP5だとSOAPのモジュールが導入されていて、soap.soを有効にすればPEAR::SOAP
利用しなくてもSOAPライブラリが利用できるようになっている。
PHP5より前のバージョンの場合はPEAR::SOAPを使おう。

SOAPモジュールの利用の仕方

    • -

マニュアルより引用
ちなみに、この拡張モジュールを使うには libxml 拡張モジュールが必要です。つまり、 --enable-libxml も指定しなければならないということです。 しかし、libxml はデフォルトで有効になっているのでこのオプションは暗黙のうちに指定されています。

SOAP サポートを有効にするには、--enable-soap を指定して PHP の configure を行います。

    • -

とのこと。
まぁ、マニュアル見てね→SOAPマニュアル

コンパイルし忘れた!!!とかyumで入れたからどうだかわからんし!
ってなったとき。

yumの場合
yum install php-soap
.soがあるか確認
/usr/lib64/php/modules/soap.so (64bitの時)
/usr/lib/php/modules/soap.so (32bitの時)
php.iniに
extension=soap.so
を記述

②ソースからコンパイルしたとき

    • enable-soapを追加してconfigureする

make clean
make
するとlibにsoap.soができてるはず。
そいつを追加すればok
まぁ、「php モジュール追加」ってグーグル先生に聞けば大丈夫。

pearのやつを入れる場合
pear install soap
こんな感じでいれたはず。忘れた。
pearがインストールされてないってやつは入れてね。

■実際にやってみた
SOAPクライアント側(PEAR版)

<?php
require_once('SOAP/Client.php'); 
$client = new SOAP_Client('リクエスト先');
$params = array('str' => 'hello', 'str2' => 'world'); 
$options = array('timeout' => 20); 
//リクエストするメソッド名を記述
$result = $client->call('getMethod', $params, $options); 
//出力結果 hello123world
echo $result; 

SOAPサーバー側(PEAR版)

<?php
require_once('SOAP/Server.php'); 

function getMethod($str, $str2){ 
$rs = $str . '123' . $str2;
return $rs;
}

$server = new SOAP_Server(); 
$server->addToMap('getMethod', array(), array()); 
$server->service($HTTP_RAW_POST_DATA);