Memo/PHP

SOAPを使う

PEAR版

インストール

Windows版PHP 4.3.10にインストールしてみた。

	C:\php\>pear install SOAP-beta
	downloading SOAP-0.8.1.tgz ...
	Starting to download SOAP-0.8.1.tgz (69,177 bytes)
	.................done: 69,177 bytes
	requires package `Mail_Mime'
	requires package `HTTP_Request'
	requires package `Net_URL'
	requires package `Net_DIME'
	SOAP: Dependencies failed

依存関係でエラー。必要パッケージをチェック

pear info パーケージ名

バージョンが古いと言われたら

pear upgrade パーケージ名

必要パッケージのインストール

	pear install Mail_Mime
	pear install Net_URL
	pear install HTTP_Request
	pear install Net_DIME-beta
	pear install SOAP-beta

Fedora Core 1の場合は、上記以外にアップグレードが必要だった。

pear upgrade Net_Socket

これで無事インストール完了。

SOAPサーバーの作成

「sayHello('名前')」という関数を作成してみる。
名前を引数に渡すと「Hello 名前」と呼んでくれる簡単なもの。
wsdlも勝手に作成してくれるので便利。

wsdlの位置を知らせてくれるhello_server.php
wsdlhello_server.php?wsdl

hello_server.php

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

	// Your class
	class HelloServer {
	    var $__dispatch_map = array();

	    function HelloServer() {
	        // Define the signature of the dispatch map
	        $this->__dispatch_map['sayHello'] =
	            array('in' => array('inputString' => 'string'),
	                  'out' => array('outputString' => 'string'),
	                  );
	    }

	    // Required function by SOAP_Server
	    function __dispatch($methodname) {
	        if (isset($this->__dispatch_map[$methodname]))
	            return $this->__dispatch_map[$methodname];
	        return NULL;
	    }

	    // Your function
	    function sayHello($inputString)
	    {
	        return 'Hello '.$inputString;
	    }
	}

	// Fire up PEAR::SOAP_Server
	$server = new SOAP_Server;

	// Fire up your class
	$helloServer = new HelloServer();

	// Add your object to SOAP server (note namespace)
	$server->addObjectMap($helloServer,'urn:HelloServer');

	// Handle SOAP requests coming is as POST data
	if (isset($_SERVER['REQUEST_METHOD']) &&
	    $_SERVER['REQUEST_METHOD']=='POST') {
	    $server->service($HTTP_RAW_POST_DATA);
	} else {
	    // Deal with WSDL / Disco here
	    require_once 'SOAP/Disco.php';

	    // Create the Disco server
	    $disco = new SOAP_DISCO_Server($server,'HelloServer');
	    header("Content-type: text/xml");
	    if (isset($_SERVER['QUERY_STRING']) &&
	        strcasecmp($_SERVER['QUERY_STRING'],'wsdl')==0) {
	        echo $disco->getWSDL(); // if we're talking http://www.example.com/index.php?wsdl
	    } else {
	        echo $disco->getDISCO();
	    }
	    exit;
	}
	?>

SOAPクライアントを作成

SOAPサーバーにある、「sayHello()」関数を呼んでみる。

	<?php
	require_once 'SOAP/Client.php';

	// Modify the URL here - note the "?wsdl" at the end
	$url = 'http://' . $_SERVER["HTTP_HOST"] . dirname($_SERVER["REQUEST_URI"]) . '/hello_server.php?wsdl';
	$wsdl = new SOAP_WSDL ($url);

	$helloClient = $wsdl->getProxy();

	echo ( $helloClient->sayHello('Bill') );
	?>

郵便番号検索Webサービスを使用してみる。

検索には数秒要するが結果を表示できた。

注意点

関連リンク


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-15 (土) 07:31:38