PHP는 XML-RPC와 SOAP라는 두 가지 프로토콜에 대한 액세스를 통합합니다. 둘 다 xmlrpc 확장에 집중되어 있습니다. 또한 PHP의 PEAR에는 PHP 4이든 PHP 5이든 기본적으로 XML-RPC 확장이 통합되어 있으며, 이 확장은 xmlrpc 확장과 아무런 관련이 없으며 XML-RPC 프로토콜 상호 작용을 독립적으로 구현할 수 있습니다. xmlrpc 확장자가 없으므로 PEAR::XML-RPC 확장자를 사용하는 것이 좋습니다.
웹 서비스 소개
웹 서비스는 이기종 시스템의 통신을 위해 만들어졌으며 기본 아이디어는 XML 기반 HTTP 원격 호출을 사용하여 표준 메커니즘을 제공하고 새로운 프로토콜을 설정할 필요가 없다는 것입니다. 현재 웹 서비스 통신에는 두 가지 프로토콜 표준이 있는데, 하나는 XML-RPC이고 다른 하나는 SOAP입니다. XML-RPC는 상대적으로 단순하고 초기에 등장한 반면 SOAP는 더 복잡하여 안정성, 견고성, 보안 및 복잡한 상호 작용이 필요할 때 주로 사용됩니다.
여기서는 주로 XML-RPC를 사용하여 웹 서비스의 상호 작용 프로세스를 간략하게 설명합니다. 일부 내용은 PHP 매뉴얼에서 가져온 것이므로 매뉴얼을 참조하는 것이 좋습니다.
xmlrpc 확장을 설치하십시오.
xmlrpc php 확장이 시스템에 설치되어 있지 않으면 올바르게 설치하십시오.
Windows 플랫폼에서는 먼저 PHP 설치 디렉터리의 php_xmlrpc.dll 확장자를 C:Windows 또는 C:Winnt 디렉터리에 넣습니다(PHP4용 확장은 C:phpextensions 디렉터리에 있고 PHP5용 확장은 C:phpext 디렉터리에 있음), C:Windowsphp.ini 또는 C:Winntphp.ini에서 확장명=php_xmlrpc.dll 앞의 세미콜론 ";"을 제거한 다음 웹 서버를 다시 시작합니다. 그리고 phpinfo()를 확인하면 XML-RPC 프로젝트가 있는지 여부를 통해 xmlrpc 확장이 올바르게 설치되었는지 확인할 수 있습니다.
Unix/Linux 플랫폼에서 xmlrpc 확장이 설치되어 있지 않은 경우, PHP를 다시 컴파일하고 구성 시 --with-xmlrpc 옵션을 추가한 후 phpinfo()를 확인하여 xmlrpc가 정상적으로 설치되었는지 확인하시기 바랍니다.
(참고: 다음 작업은 xmlrpc 확장의 일반적인 설치를 기반으로 합니다. 올바르게 설치했는지 확인하십시오.)
XML-RPC의 작동 원리
XML-RPC는 일반적으로 전체 프로세스에서 XML을 사용하여 통신하는 것을 의미합니다. 먼저, RPC 클라이언트로부터 전달된 XML로 캡슐화된 요청을 처리하도록 RPC 서버가 구성되고, 처리 결과는 XML 형식으로 RPC 클라이언트에 반환됩니다. 그런 다음 클라이언트는 XML을 분석하여 필요한 데이터를 얻습니다.
XML-RPC의 서버측에는 클라이언트가 호출할 수 있는 기성 함수가 있어야 하며, 클라이언트가 제출한 요청의 함수 및 메소드는 서버측의 함수 및 메소드와 일치해야 합니다. 그렇지 않으면 필요한 결과를 얻을 수 없습니다.
아래에서는 전체 프로세스를 설명하는 간단한 코드를 만듭니다.
XML-RPC 실습
서버는 xmlrpc_server_create 함수를 이용하여 서버를 생성한 후 노출해야 하는 RPC 호출 인터페이스를 등록하고 RPC 클라이언트로부터 XML 데이터 POST를 받아 처리한 후 처리 결과를 클라이언트에 표시합니다. XML 형식으로.
코드는 다음과 같습니다: rpc_server.php
<?php
/**
* 기능 : RPC 클라이언트가 호출하기 위해 제공하는 함수
* 매개변수:
* $method는 클라이언트가 호출해야 하는 함수입니다.
* $params는 클라이언트가 호출해야 하는 함수의 매개변수 배열입니다.
* 반환: 지정된 호출 결과를 반환합니다.
*/
함수 rpc_server_func($method, $params) {
$parameter = $params[0];
if ($parameter == "가져오기"){
$return = ''이 데이터는 get 메소드에 의해 생성되었습니다'';
}또 다른{
$return = ''메서드나 매개변수를 지정하지 않음'';
}
$반환;
}
//XML-RPC 서버측 생성
$xmlrpc_server = xmlrpc_server_create();
// 실제로 rpc_server_func 함수를 가리키는 서버가 호출하는 rpc_server 메소드를 등록합니다.
xmlrpc_server_register_method($xmlrpc_server, "rpc_server", "rpc_server_func")
//클라이언트에서 XML 데이터 POST를 수락합니다.
$request = $HTTP_RAW_POST_DATA;
//클라이언트를 호출하여 XML 요청을 실행한 후 실행 결과를 가져옵니다.
$xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null)
//함수 처리 후 결과 XML 출력
header(''콘텐츠 유형: 텍스트/xml'');
echo $xmlrpc_response;
//XML-RPC 서버측 리소스를 삭제합니다.
xmlrpc_server_destroy($xmlrpc_server);
?>
서버 측이 구성되었으면 RPC 클라이언트를 구성해 보겠습니다. 클라이언트는 대략 Socket을 통해 XML-RPC 서버의 포트 80에 접근한 후, 호출해야 할 RPC 인터페이스를 XML로 캡슐화하고, 이를 POST 요청을 통해 RPC 서버에 제출하고, 최종적으로 서버가 반환하는 결과를 얻는다.
코드는 다음과 같습니다: rpc_client.php
<?php
/**
* 기능 : XML-RPC 서버에 접속하기 위해 클라이언트에 제공하는 기능
* 매개변수:
* $host 연결이 필요한 호스트
* $port 호스트에 연결하기 위한 포트
* $rpc_server XML-RPC 서버측 파일
* $request 캡슐화된 XML 요청 정보
* 반환: 연결에 성공하면 서버에서 반환한 XML 정보가 반환됩니다. 연결에 성공하면 false를 반환합니다.
*/
function rpc_client_call($host, $port, $rpc_server, $request) {
//지정된 서버 열기
$fp = fsockopen($host, $port);
//통신이 필요한 XML-RPC 서버의 쿼리 POST 요청 정보를 구성합니다.
$query = "POST $rpc_server HTTP/1.0nUser_Agent: XML-RPC 클라이언트n호스트: ".$host."nContent-Type: text/xmlnContent-Length: ".strlen($request)."n n".$request."n";
//구성된 HTTP 프로토콜을 서버에 보내고, 실패하면 false를 반환합니다.
if (!fputs($fp, $query, strlen($query))) {
$errstr = "쓰기 오류";
거짓을 반환;
}
//HTTP 헤더 및 XML 정보를 포함하여 서버에서 반환된 모든 정보를 가져옵니다.
$contents = '''';
동안 (!feof($fp)){
$contents.= fgets($fp);
}
//연결 리소스를 닫은 후 얻은 콘텐츠를 반환합니다.
fclose($fp);
$contents를 반환합니다.
}
//RPC 서버에 접속하기 위한 정보 구성
$host = ''로컬호스트'';
$ 포트 = 80;
$rpc_server = ''/~heiyeluren/rpc_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 version="1.0" 인코딩="iso-8859-1"?>'';
$xml = 폭발($split, $response);
$xml = $split .array_pop($xml);
$response = xmlrpc_decode($xml);
//RPC 서버에서 얻은 정보를 출력합니다.
print_r($응답);
?>
대략적으로 말하면 위의 예는 rpc_server라는 메소드를 제출하고 매개변수는 get이며 서버에서 반환되는 XML 데이터는 다음과 같습니다.
<?xml version="1.0" 인코딩=" iso-8859-1 "?>
<메서드응답>
<매개변수>
<파라미터>
<값>
<string>get 메소드에 의한 데이터</string>
</값>
</param>
</params>
</methodResponse>
그런 다음 xmlrpc_decode 함수를 통해 이 XML을 PHP 문자열로 인코딩하고 이를 마음대로 처리할 수 있으며 전체 웹 서비스 상호 작용이 완료됩니다.
결론
XML-RPC이든 SOAP이든 원격 프로세스 호출을 안정적이고 안전하게 수행하고 프로젝트를 완료할 수 있는 한 전체 웹 서비스는 성공할 것입니다. 또한 가능하다면 PEAR에서 XML-RPC를 사용하여 위와 유사한 작업을 구현해 볼 수도 있습니다. 이 방법이 더 간단하고 더 적합할 수 있습니다.
웹 서비스 상호 작용에는 XML-RPC를 사용하십시오. 일부 코드는 PHP 설명서를 참조하십시오. 자세한 정보를 얻으려면 설명서를 참조하는 것이 좋습니다. 기사가 정확하지 않은 경우 정정하십시오.
이 기사는 PHP 정보의 원본 링크인 http://www.phpchina.com/html/84/n-33884.html 에서 가져온 것입니다.