戻り値 | 関数名 | パラメーター |
---|---|---|
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"); |