PHP: XMLRPC 関数 - Manual
PHP  
downloads | documentation | faq | getting help | mailing lists | | php.net sites | links | my php.net 
search for in the  
<xml_set_unparsed_entity_decl_handlerxmlrpc_decode_request>
view the version of this page
Last updated: Tue, 21 Dec 2004

CXXVIII. XMLRPC 関数

導入

ここに示す関数は、XML-RPCサーバおよびクライアントを書くために使用 されます。XML-RPCに関するより詳細な情報については、 を参照してください。 そして、この拡張文字モジュールと関数に関するより詳細なドキュメン トについては、 を参照して 下さい。

警告

このモジュールは、 実験的なものです。これは、これらの関数の動作、関 数名は、このドキュメントに書かれて事項と同様に告知なく将来的なPHPのリ リースで変更される可能性があります。注意を喚起するとともに、このモジュー ルは使用者のリスクで使用して下さい。

要件

これらの関数は、標準モジュールの一部として利用可能であり、常に使用できます。

インストール手順

PHPのXML-RPCサポートはデフォルトでは有効となっていません。 XML-RPCサポートを有効にするには、PHPをコンパイルする際に設定オプション --with-xmlrpc[=DIR] を使用する必要があります。この拡張モジュールは、4.1.0以降 PHP に付属 しています。

実行用の設定

これらの関数の動作は、php.iniの設定により変化します。

表 1. XML-RPC設定オプション

名前デフォルト変更可能
xmlrpc_errors"0"PHP_INI_SYSTEM
xmlrpc_error_number"0"PHP_INI_ALL
PHP_INI_*定数に関する詳細と定義については、 ini_set()を参照して下さい。

リソース型

この拡張モジュールはリソース型を全く定義しません。

定義済みの定数

この拡張モジュールは定数を全く定義しません。

目次
xmlrpc_decode_request -- XMLをネーティブなPHP型にデコードする
xmlrpc_decode -- XMLをネーティブなPHP型にデコードする
xmlrpc_encode_request -- メソッドリクエスト用のXMLを生成する
xmlrpc_encode -- PHPの値に関するXMLを生成する
xmlrpc_get_type --  PHPの値に関するxmlrpc型を取得する。特にbase64及びdatetime文字列で有用
xmlrpc_is_fault --  Determines if an array value represents an XMLRPC fault
xmlrpc_parse_method_descriptions -- メソッド説明のリストにXMLをデコードする
xmlrpc_server_add_introspection_data -- introspectionドキュメントを追加する
xmlrpc_server_call_method -- XMLリクエストをパースし、メソッドをコールする
xmlrpc_server_create -- xmlrpcサーバを作成する
xmlrpc_server_destroy -- サーバリソースを破棄する
xmlrpc_server_register_introspection_callback -- ドキュメントを生成するPHP関数を登録する
xmlrpc_server_register_method -- メソッド名が一致するメソッドリソースにPHP関数を登録する
xmlrpc_set_type -- PHP文字列型用にxmlrpc型、base64またはdatetimeを設定する


add a note add a note User Contributed Notes
XMLRPC 関数
Jerome Delamarche
14-Oct-2004 09:58
The documentation lacks an example that shows how to send a fault in a response. Here is how to do it:

$args = array("faultCode" => $errcode, "faultString" => $errmsg);
$resp = xmlrpc_encode_request(NULL,$args);
//echo $resp;
php at hendrik-krauss dot de
13-Aug-2004 07:38
On "datetime" values:

If you implement an XML-RPC server with these functions and a client calls a method on your server, sending a datetime as parameter (in ISO 8601 format, as specified at ), the PHP XML-RPC will pass your registered server method an object as parameter. That object, for example, looks like:
obj->type="datetime"
obj->scalar="20040420T13:32:40"
obj->timestamp=1082460760

If you do xmlrpc_get_type(obj), it will return "datetime", so presumably that function just returns the value of 'type'. 'scalar' seems to be the on-the-wire representation of the datetime (ISO 8601, exactly as received). 'timestamp' appears to be the ISO value in 'scalar' converted into a normal PHP timestamp (i.e. Unix time_t).

Note on 'scalar': Using a MySQL DB, we did something like  "select blah where start_time >= $obj->scalar ;". That actually worked and returned expected results, so MySQL appears to handle that ISO 8601 format correctly.
swunderlin at REMOVE-telemedia dot ch
09-Jun-2004 10:20
pear hs an XML_RPC package, if you can't recompile your php:
steph at zend dot com
08-Jun-2004 11:04
It took me a while to get a client together without external libraries.  This very basic client/server pair works on my home set-up - hopefully it will save the next xml-rpc virgin some grief.

/* clienttest.php */
<?php
function do_call($host, $port, $request) {
  
  
$fp = fsockopen($host, $port, $errno, $errstr);
  
$query = "POST /home/servertest.php HTTP/1.0\nUser_Agent: My Egg Client\nHost: ".$host."\nContent-Type: text/xml\nContent-Length: ".strlen($request)."\n\n".$request."\n";

   if (!
fputs($fp, $query, strlen($query))) {
      
$errstr = "Write error";
       return
0;
   }

  
$contents = '';
   while (!
feof($fp)) {
      
$contents .= fgets($fp);
   }

  
fclose($fp);
   return
$contents;
}

$host = 'localhost';
$port = 80;
$request = xmlrpc_encode_request('cycle', 'egg');
$response = do_call($host, $port, $request);
/* do something with $response, e.g. print it */
?>

/* servertest.php */
<?php
function lifecycle($method, $params) {
/* $method = 'cycle', $params = (array of) request parameter(s); $data is also passed from xmlrpc_server_call_method, if we had any data to pass */
  
switch($params[0]) {
       case
'egg':
          
$reply = 'All eggs will be birds one day.';
       break;
       default:
          
$reply = 'That must have been an otheregg';
   }
   return
$reply;
}

$server = xmlrpc_server_create();

/* register the 'external' name and then the 'internal' name */
xmlrpc_server_register_method($server, "cycle", "lifecycle");

$request = $HTTP_RAW_POST_DATA; // no you don't need 'always on', and no $_POST doesn't work.

/* the parameters here are 'server, xml-string and user data'.  There's supposed to be an optional 'output options' array too, but I can't get it working :( hence header() call */
$response = xmlrpc_server_call_method($server, $request, null);
header('Content-Type: text/xml');
print
$response;

xmlrpc_server_destroy($server);
?>
andrej
25-Feb-2004 04:52
devshed article is at
mboeren at php dot net
25-Feb-2004 12:34
Just a quick addition to my previous xmlrpc_client class: since you cannot use remote methods containing capital letters or methods from subhandlers (like 'system.listMethods()'), I added a 'call(...)' method to the class.

<?php
  
// this method should be copy/pasted in the
   // xmlrpc_client class

  
function call($function)
   {
      
$return = NULL;
      
$argv = func_get_args();
      
array_shift($argv); // remove function argument
      
$this->__call($function, $argv, &$return);
       return
$return;
   }

  
// now, you can also do
  
$result = $client->call('system.listMethods');
  
$sum = client->call('add', '1', '2');
?>
mboeren at php dot net
24-Feb-2004 03:01
I use the following code (requires the overload extension) to make developing clients easier:

<?php
include("utils/utils.php"); // from xmlrpc-epi utils

/*
Usage:
   $client = new xmlrpc_client("");
   print $client->echo('x')."\n";
   print $client->add(1, 3)."\n";

*/
class xmlrpc_client
{
   var
$url;
   var
$urlparts;

   function
xmlrpc_client($url)
   {
      
$this->url = $url;
      
$this->urlparts = parse_url($this->url);
       foreach(array(
'scheme', 'host', 'user', 'pass', 'path',
                    
'query', 'fragment')
               as
$part) {
           if (!isset(
$this->urlparts[$part])) {
              
$this->urlparts[$part] = NULL;
               }
           }
   }

   function
__call($function, $arguments, &$return)
   {
      
$requestprms['host'] = $this->urlparts['host'];
      
$requestprms['port'] = $this->urlparts['port'];
      
$requestprms['uri'] = $this->urlparts['path'];
      
$requestprms['method'] = $function;
      
$requestprms['args'] = $arguments;
      
$requestprms['debug'] = 0;
      
$requestprms['timeout'] = 0;
      
$requestprms['user'] = NULL;
      
$requestprms['pass'] = NULL;
      
$requestprms['secure'] = 0;

      
$result = xu_rpc_http_concise($requestprms);
       if (
is_array($result) && isset($result['faultCode'])) {
           print(
'Error in xmlrpc call \''.$function.'\''."\n");
           print(
'  code  : '.$result['faultCode']."\n");
           print(
'  message: '.$result['faultString']."\n");
           return
false;
           }
      
$return = $result;
       return
true;
   }

}
overload('xmlrpc_client');

?>
Frank
21-Jan-2004 06:32
here's how to install it on windows (so it actually works):

- php.ini > enable "php_xmlrpc.dll" in extensions.
- php.ini > make sure "extension_dir" is set correctly to find the dll in your php installation dir /extensions.
- copy iconv.dll from your php install dir /dlls to a directory in your path (ex: c:/windows).

if you got some errors while launching apache prior to trying this I suggest you reboot your machine first... sounds weird I know, but remember... you're running Windowz.
Have fun
sjtirtha at gmx dot de
21-Aug-2003 05:23
To install xml-rpc feature on Windows, you need to have "php_xmlrpc.dll" on your "/extensions" Folder.
And you need to enable it on "php.ini".

You need also library from .
to make your code simply.

Look the examples at .
mistcat attyatatat phreaker dootttt net
17-Apr-2003 10:52
Hope this saves somone some frustration:
As of php 4.3.1 and xmlrpc-epi-php-0.51 php would return a content type text/html instead of text/xml in its responses.  this is a bad thing.  Perl's XMLRPC::Lite for instance will not like you if you do this.  Happily the solution is simple:

header("Content-Type: text/xml");

Happy Hunting.

-Nate
daniel(at)lorch.cc
25-Mar-2003 01:21
If you need a tutorial on the XML-RPC-Extension go to devshed:

 
bmichael at goldparrot dot com
09-Feb-2003 05:52
If anyone is interested in making XMLRPC requests directly from the client, I have been able to get xmlrpc to
work with vcXMLRPC javascript backend.

After about 1 week of scanning the market, I found this solution to be the best on Javascript back end.  It uses the Microsoft.HTTP activeX control for IE, or HTTPRequest Object for Mozilla.

You include vc(Virtual Cowboys) vcXMLRPC.js file into your pages and make the rpc calls from with javascript to create the requests.

It works both ways.

Two Notes:

I have tested it on IE 6.02 and you need to change lines in ProcessRequest :
function to read:

  dom = this.getObject("XMLDOM",http.responseText);

and change the getObject function to use the latest ActiveX Control:

 MSXML2.XMLHTTP.3.0  (or 4.0)
 MSXML2.DOMDocument.3.0  (or 4.0)

The controls are found on MSDN in the Web Services -> XML area.

As another note, you DO NOT NEED the rpcproxy.cgi script to use this.  That is a proxy script to get around JS Security.  You can use PHP to build the proxy.  But, I was able to get the CGI working with GCC compiler on Solaris (change the -KPCI, depend and -x03 optimizer settings in the Makefile )
roland at php dot net
29-Jan-2003 10:15
You can find a good howto about the xml-rpc extension at



It's an easy client / server example - works quite good :-)
nospam at phppatterns dot com
07-Dec-2002 01:45
Note that you do need the iconv module installed to use the XML-RPC extension (see: )
hfuecks at pinkgoblin dot com
26-Sep-2002 01:34
You can pass PHP errors with the XML-RPC extension as described here:
steve at orangeNOSPAMimagineering dot com
24-Aug-2002 08:32
There's a handy library by Keith Devens (version 2.2.1) at


Here is a sample client. It remotely calls sample.sumAndDifference
with two parameters (3 and 5).
It returns:

sum => 8
difference => -2

<?php
include ("kd_xmlrpc.php");
// define("XMLRPC_DEBUG", 0);    // Set to 1 for handy debugging

$method = "sample.sumAndDifference";
$params = XMLRPC_prepare(array(3,5));

$site = "xmlrpc-c.sourceforge.net";
$location = "/api/sample.php";

list(
$success, $result) = XMLRPC_request( $site, $location, $method, $params );

// XMLRPC_debug_print();    // uncomment for debugging

foreach ( $result as $key => $value ) {
         echo(
" $key => $value \n");
}

?>
hfuecks at pinkgoblin dot com
15-Aug-2002 03:32
This extension does not handle the process of making making XML-RPC client requests via HTTP; it only prepares the XML-RPC request payload.

This differs from many other XML-RPC implementations but offers greater flexibility, allowing SSL connections, authentication headers and XML-RPC via other transports like SMTP.
hfuecks at pinkgoblin dot com
28-Jul-2002 08:33
Anyone interested in PHP-GTK talking to an XML-RPC server:

ivanr at webkreator dot com
21-Jun-2002 06:50
For a really easy way to use this XML-RPC extension take a look at

XML-RPC Class Server ()

It automatically creates servers out of PHP classes. Creating clients is almost as easy, especially with the recent addition of the overload extension to PHP (see ).
nic at uklinux dot NOSPAM dot net
24-Apr-2002 04:05
An alternative XML-RPC implementation is available at - it's written in PHP so you can use it on servers for which you don't have the luxury of rebuilding PHP on.

nic
cmv at php dot net
08-Jan-2002 01:26
"Latest releases" is a bit redundant, since this extension is bundled into PHP (as of 4.1.0).  You don't need to download anything from sourceforge to make this work.  Just compile PHP with the --with-xmlrpc flag.

The site is useful, however, for documentation.
ravan_n at hotmail dot com
27-Dec-2001 11:01
Refer to the below link for documentation / latest releases of the package.


<xml_set_unparsed_entity_decl_handlerxmlrpc_decode_request>
 Last updated: Tue, 21 Dec 2004
show source | credits | sitemap | contact | advertising | mirror sites 
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: /
Last updated: Mon Mar 14 08:13:06 2005 Local time zone must be set--see zic manual page