phprpc.inc ver 0.7.12   関数一覧   2020年04月26日
戻り値 関数名 パラメーター
String(msg)
rpc_call
(String func,Array param,String uri,String domain,String path,String host,String port,String soapaction)

domain/pathのサーバーのfuncというサービスをparamのパラメータで呼び出す。
サーバー側の返信メッセージを返します。
Shift-JISの場合はSJISを返します。
func:サービス名(関数名)
param:パラメータの連想配列
uri:ネームスペースのURI
domain:相手サーバーのドメイン名
path:サービスのパス
host:自サーバーのドメイン名
port:ソケット接続ポート(httpのデフォルト:80)
soapaction:ヘッダーにつけるSOAPACTION(デフォルト:"")
例 $func = "Calc";
  $param["para1"] = 1;
  $param["para2"] = 3;
  $param["calc"] = "add";
  $uri = "urn:SOME-URI";
  $domain = "www.test.com";
  $path = "server.php";
  $host = "localhost";
  $port = "80";
  $soapaction = "";
例 $msg = $soap->rpc_call($func,$param,$uri,$domain,$path,$host,$port,$soapaction);
戻り値 関数名 パラメーター
String(msg)
rpc_call_type
(String func,Array param,String uri,String domain,String path,String host,String port,String soapaction)

domain/pathのサーバーのfuncというサービスをparamのパラメータで呼び出す。
サーバー側の返信メッセージを返します。
各パラメータにxsi:type="xsd:$type"属性をつけて送信します。
typeがSOAP-ENC:base64の場合はxsi:type="SOAP-ENC:base64"属性をつけて送信します。
typeがSOAP-ENC:base64の場合は事前にbase64エンコードしたものをvalueにセットします。
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
func:サービス名(関数名)
param:パラメータの連想配列(rpc_callとは設定が違います)
param["name"][$i]:$i+1番目の要素名(変数名)
param["value"][$i]:$i+1番目の要素(変数)の値
param["type"][$i]:$i+1番目の要素の型
uri:ネームスペースのURI
domain:相手サーバーのドメイン名
path:サービスのパス
host:自サーバーのドメイン名
port:ソケット接続ポート(httpのデフォルト:80)
soapaction:ヘッダーにつけるSOAPACTION(デフォルト:"")
例 $func = "Calc";
  $param["name"][0] = "para1";
  $param["value"][0] = 1.2;
  $param["type"][0] = "float";
  $param["name"][1] = "para2";
  $param["value"][1] = "3.4";
  $param["type"][1] = "float";
  $param["name"][2] = "calc";
  $param["value"][2] = "add";
  $param["type"][2] = "string";
  $uri = "urn:SOME-URI";
  $domain = "www.test.com";
  $path = "server.php";
  $host = "localhost";
  $port = "80";
  $soapaction = "";
例 $msg = $soap->rpc_call_type($func,$param,$uri,$domain,$path,$host,$port,$soapaction);
戻り値 関数名 パラメーター
Mix(result)
rpc_result
(String msg)

RPCの結果がひとつの場合の結果を返します。
base64エンコードはデコードして返します。
msg:サーバー側の返信メッセージ。
(rpc_call,rpc_call_typeの返り値)
例 $result = $soap->rpc_result($msg);
戻り値 関数名 パラメーター
Array(result)
rpc_result_array
(String msg)

RPCの結果を連想配列に返します。
base64エンコードはデコードしてvalueにセットします。
$array["name"][$i]:$i+1番目の要素名(変数名)
$array["type"][$i]:$i+1番目の要素(変数)の値の型
$array["value"][$i]:$i+1番目の要素(変数)の値
例 $result_array = $soap->rpc_result_array($msg);
  $answer1 = $result_array["value"][0];
  $answer2 = $result_array["value"][1];
戻り値 関数名 パラメーター

rpc_server
(Array func_list,String ns,String uri)

func_listの関数を登録します。
クライアントからSOAPで呼ばれた場合はサービスを実行し結果を返します
ns:返信用メッセージのネームスペース
uri:返信用メッセージのネームスペースのURI
func_list:関数名の配列
サービスの関数はfunction funcname($param,$error_no,$error_msg)
という形にします
$param:連想配列
$param["name"][$i]:パラメータの要素名
$param["value"][$i]:パラメータの要素の値
$error_no,$error_msg:参照呼出し
内部でエラーが発生した場合に値をセットする
エラー原因server:$error_no=1 client:$error_no=2
処理結果を連想配列に代入して返す
例 
 function isnum($st){
  if(ereg ("(^(([-]?)([0-9]*)([,\.]?)([0-9]+))$)|
    (^(([-]?)([0-9]+)([,\.]?)([0-9]*))$)|
    (^(([-]?)([0-9]+)([,\.]?)([0-9]+))$)",$st)){
   return(true);
  }
  return (false);
 }
 function GetName($param,$error_no,$error_msg){
  $id = $param["value"][0];
  if($id<0 || $id>3){
   $error_msg = "idが範囲[0-3]外です。id=" . $id;
   $error_no = 2;
   return -1;
  }
  $name_array = array();
  $name_array[0] = "鈴木";
  $name_array[1] = "佐藤";
  $name_array[2] = "田中";
  $name_array[3] = "高橋";
  $answer = array();
  $answer["result"] = $name_array[$id];
  return $answer;
 }  
 function Calc($param,$error_no,$error_msg){
  $calc = $param["value"][0];
  $para1 = $param["value"][1];
  $para2 = $param["value"][2];
  if(isnum($para1) && isnum($para2)){
   $answer = array();
   if($calc == "add"){
    $answer["result"] = $para1 + $para2;
   }else if ($calc == "sub"){
    $answer["result"] = $para1 - $para2;
   }else if ($calc == "mul"){
    $answer["result"] = $para1 * $para2;
   }else if ($calc == "div"){
    if($para2 == 0){
     $error_msg = "0で割ろうとしました。para1=$para1 para2=$para2";
     $error_no = 2;
     return -1;
    }
    $answer["result"] = $para1 / $para2;
   }
   return $answer;
  }else{
   $error_msg = "パラメータが異常です。para1=$para1 para2=$para2";
   $error_no = 2;
   return -1;
  }
 }  

 $func_list = array("GetName","Calc");

 rpc_server($func_list,"sample1","urn:sample");
戻り値 関数名 パラメーター

rpc_server_type
(Array func_list,String ns,String uri)

func_listの関数を登録します。
クライアントからSOAPで呼ばれた場合はサービスを実行し結果を返します。
返信パラメータに型を指定(xsi:type="xsd:$type")する場合に使用します。
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
ns:返信用メッセージのネームスペース
uri:返信用メッセージのネームスペースのURI
func_list:関数名の配列
サービスの関数はfunction funcname($param,$error_no,$error_msg)
という形にします
$param:連想配列
$param["name"][$i]:パラメータの要素名
$param["value"][$i]:パラメータの要素の値
$error_no,$error_msg:参照呼出し
内部でエラーが発生した場合に値をセットする
エラー原因server:$error_no=1 client:$error_no=2
処理結果を連想配列(rpc_serverとは設定の仕方が違う)に代入して返す
$answer["name"][$i]:$i+1番目の要素名
$answer["value"][$i]:$i+1番目の要素の値
$answer["type"][$i]:$i+1番目の要素の値の型
typeにSOAP-ENC:base64を指定するとBase64エンコードします。
この際クライアントからBase64エンコードして渡された文字のエンコードを使用します。
この際クライアントからのものがない場合はUTF-8を使用します。
例 
 function isnum($st){
  if(ereg ("(^(([-]?)([0-9]*)([,\.]?)([0-9]+))$)|
    (^(([-]?)([0-9]+)([,\.]?)([0-9]*))$)|
    (^(([-]?)([0-9]+)([,\.]?)([0-9]+))$)",$st)){
   return(true);
  }
  return (false);
 }
 function GetName($param,$error_no,$error_msg){
  $id = $param["value"][0];
  if($id<0 || $id>3){
   $error_msg = "idが範囲[0-3]外です。id=" . $id;
   $error_no = 2;
   return -1;
  }
  $name_array = array();
  $name_array[0] = "鈴木";
  $name_array[1] = "佐藤";
  $name_array[2] = "田中";
  $name_array[3] = "高橋";
  $answer = array();
  $answer["name"][0] = "name";
  $answer["type"][0] = "string";
  $answer["value"][0] = $name_array[$id];
  return $answer;
 }
 function Calc($param,$error_no,$error_msg){
  $calc = $param["value"][0];
  $para1 = $param["value"][1];
  $para2 = $param["value"][2];
  if(isnum($para1) && isnum($para2)){
   $answer = array();
   $answer["name"][0] = "return";
   $answer["type"][0] = "float";
   if($calc == "add"){
    $answer["value"][0] = $para1 + $para2;
   }else if ($calc == "sub"){
    $answer["value"][0] = $para1 - $para2;
   }else if ($calc == "mul"){
    $answer["value"][0] = $para1 * $para2;
   }else if ($calc == "div"){
    if($para2 == 0){
     $error_msg = "0で割ろうとしました。para1=$para1 para2=$para2";
     $error_no = 2;
     return -1;
    }    
    $answer["value"][0] = $para1 / $para2;
   }
   return $answer;
  }else{
   $error_msg = "パラメータが異常です。para1=$para1 para2=$para2";
   $error_no = 2;
   return -1;
  }
 }

 $func_list = array("GetName","Calc");

 rpc_server_type($func_list,"sample1","urn:sample");