>백엔드 개발 >PHP 튜토리얼 >PHP의 XML-RPC 사용 참고 사항

PHP의 XML-RPC 사용 참고 사항

WBOY
WBOY원래의
2016-07-30 13:31:43948검색
PHP는 두 가지 웹 서비스 통신 프로토콜 표준인 XML-RPC와 SOAP를 통합합니다. 기본 아이디어는 XML 기반 HTTP 원격 호출을 사용하여 표준 메커니즘을 제공하므로 새로운 프로토콜이 필요하지 않습니다. 실제로 이는 실제 개발 애플리케이션에서 매우 실용적입니다. 예를 들어 PC 클라이언트나 널리 사용되는 휴대폰 클라이언트가 서버와 통신해야 하는 경우 XML-RPC가 좋은 솔루션입니다. 이 방법은 많이 사용되지는 않지만 PHP에서 XML-RPC를 사용하는 방법에 대한 몇 가지 참고 사항입니다. 기본 원칙은 XML-RPC가 XML을 사용하여 통신한다는 것입니다. 먼저, RPC 클라이언트로부터 전달된 XML로 캡슐화된 요청을 처리하도록 RPC 서버가 구성되고, 처리 결과는 XML 형식으로 RPC 클라이언트에 반환됩니다. 그런 다음 클라이언트는 XML을 분석하여 필요한 데이터를 얻습니다. XML-RPC의 서버측에는 클라이언트가 호출할 수 있는 기성 함수가 있어야 하며, 클라이언트가 제출한 요청의 함수 및 메소드는 서버측의 함수 및 메소드와 일치해야 합니다. 그렇지 않으면 필요한 결과를 얻을 수 없습니다. 먼저 PHP가 XML-RPC 확장을 지원하는지 확인하세요. 그렇지 않은 경우 Windows에서 PHP를 다시 컴파일할 때 php_xmlrpc.dll을 추가하세요. 구성 – with-xmlrpc 옵션(저는 Ubuntu를 사용하고 있으므로 sudo apt-get install php5-xmlrpc만 실행하면 됩니다.) 서버 세그먼트 코드는 다음과 같습니다. 자세한 설명은
/* server.php
* @function 提供给RPC客户端调用的函数
* @param   string  $method 客户端需要调用的函数
* @param   array   $params 客户端需要调用的函数的参数数组
* return   string  返回调用结果
*/
function rpc_server_func($method, $params) {
$parameter = $params[0];
if ($parameter == "get") {
$return = 'This data by get method';
} else {
$return = 'Not specify method or params';
}
return $return;
}

//产生XML-RPC的服务器端
$xmlrpc_server = xmlrpc_server_create();
//注册一个服务器端调用的方法rpc_server,实际指向的是rpc_server_func函数
xmlrpc_server_register_method($xmlrpc_server, "rpc_server", "rpc_server_func");
//接受客户端POST过来的XML数据
$request = $HTTP_RAW_POST_DATA;
//执行调用客户端的XML请求后获取执行结果
$xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null);
//把函数处理后的结果XML进行输出
header('Content-Type: text/xml');
echo $xmlrpc_response;
//销毁XML-RPC服务器端资源
xmlrpc_server_destroy($xmlrpc_server);

/* client.php
* @function    提供给客户端进行连接XML-RPC服务器端的函数
* @param   string  $host  需要连接的主机
* @param   string  $port  连接主机的端口
* @param   string  $rpc_server XML-RPC服务器端文件
* @param   $request  封装的XML请求信息
* return   成功返回由服务器端返回的XML信息,失败返回false
*/
function rpc_client_call($host, $port, $rpc_server, $request) {
//打开指定的服务器端
$fp = fsockopen($host, $port);
//构造需要进行通信的XML-RPC服务器端的查询POST请求信息
$query = "POST $rpc_server HTTP/1.0\nUser_Agent: XML-RPC Client\nHost: " . $host . "\nContent-Type: text/xml\nContent-Length: " . strlen($request) . "\n\n" . $request . "\n";
//把构造好的HTTP协议发送给服务器,失败返回false
if (!fputs($fp, $query, strlen($query))) {
$errstr = "Write error";
return false;
}
//获取从服务器端返回的所有信息,包括HTTP头和XML信息
$contents = "";
while (!feof($fp)) {
$contents .= fgets($fp);
}
//关闭连接资源后返回获取的内容
fclose($fp);
return $contents;
}
//构造连接RPC服务器端的信息
$host = 'localhost';
$port = 80;
$rpc_server = 'server.php';
//把需要发送的XML请求进行编码成XML,需要调用的方法是rpc_server,参数是get
$request = xmlrpc_encode_request('rpc_server', 'get');
//调用rpc_client_call函数把所有请求发送给XML-RPC服务器端后获取信息
$response = rpc_client_call($host, $port, $rpc_server, $request);
//分析从服务器端返回的XML,去掉HTTP头信息,并且把XML转为PHP能识别的字符串
$split = "";
$xml = explode($split, $response);
$xml = $split . array_pop($xml);
$response = xmlrpc_decode($xml);
//输出从RPC服务器端获取的信息
print_r($response);

xmlrpc_decode 함수를 통해 처리하기 위해 이 XML을 PHP 문자열로 인코딩하면 전체 웹 서비스 상호 작용이 완료됩니다. XML-RPC 함수 참조:
  • xmlrpc_decode_request — XML을 PHP 고유 유형으로 디코딩
  • xmlrpc_decode — XML을 PHP 고유 유형으로 디코딩
  • xmlrpc_encode_request — PHP 값에 대한 XML
  • xmlrpc_encode 생성 ​​— PHP 값에 대한 XML
  • xmlrpc_get_type 생성 ​​— PHP 값에 대한 xmlrpc 유형 가져오기
  • xmlrpc_is_fault — 배열 값이 XMLRPC 오류를 나타내는지 확인
  • xmlrpc_parse_method_descriptions — XML을 메서드 설명 목록으로 디코딩
  • xmlrpc_server_add_introspection_data — 자체 설명 문서 추가
  • xmlrpc_server_call_method — XML 요청을 구문 분석하고
  • xmlrpc_server_create 메소드를 호출합니다. xmlrpc 서버 생성
  • xmlrpc_server_destroy — 서버 리소스 삭제
  • xmlrpc_server_register_introspection_callback — 문서 생성을 위한 PHP 함수 등록
  • xmlrpc_server_register_method — xmlrpc 메소드 이름
  • xmlrpc_set_type과 일치하도록 PHP 함수 등록 — PHP 문자열 값에 대한 xmlrpc, base64 또는 datetime 유형 설정

  • 위 내용은 관련 내용을 포함하여 PHP에서의 XML-RPC 사용법을 소개한 것입니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    이전 기사:PHP 공통 함수다음 기사:PHP 공통 함수