|
użytkowników online: 61
|
OPINIE UŻYTKOWNIKÓW
|
Z mojej strony serwisowi należy się bardzo mocna pochwała. Nawet późna pora zgłoszenia problemu (23.00) nie przeszkodziła Darkowi w jego rozwiązaniu. Do tego poziom odpisywania na maile jest bardzo wysoki... wszystko wykłada jak cierpliwy nauczyciel. Śmiało mogę przyznać, że zamieszczone na stronach porady są rzeczowo opisane - a nie jak to bywa w innych serwisach mamy sam kod i nic poza tym! Jeszcze raz wielkie dzięki!
Damian Jarosz
Adminer.pl
|
|
PODRĘCZNIK PHP 5.x, 4.x, 3.x - częściowo spolszczony / źródło: www.php.net
[Spis]
[A]
[B]
[C]
[D]
[E]
[F]
[G]
[H]
[I]
[J]
[K]
[L]
[M]
[N]
[O]
[P]
[Q]
[R]
[S]
[T]
[U]
[V]
[X]
[W]
[Z]
CXXXVI. XML-RPC Functions
These functions can be used to write XML-RPC servers and clients.
You can find more information about XML-RPC at
http://www.xmlrpc.com/, and more
documentation on this extension and its functions at
http://xmlrpc-epi.sourceforge.net/.
| Ostrzeżenie | Ten moduł jest w stadium
EKSPERYMENTALNYM. Oznacza to, że zachowanie tych funkcji,
ich nazwy, w zasadzie wszystko udokumentowane tutaj może zostać zmienione w
przyszłych wersjach PHP bez wcześniejszego uprzedzenia. Używaj tego modułu na
własne ryzyko. |
Do zbudowania tego rozszerzenia nie są wymagane
żadne zewnętrzne biblioteki.
XML-RPC support in PHP is not enabled by default. You will need to
use the --with-xmlrpc[=DIR] configuration
option when compiling PHP to enable XML-RPC support. This extension is
bundled into PHP as of 4.1.0.
Na działanie tych funcji wpływają ustawienia zawarte w pliku
php.ini.
Tabela 1. XML-RPC configuration options | Name | Default | Changeable | Changelog |
|---|
| xmlrpc_errors | "0" | PHP_INI_SYSTEM | Available since PHP 4.1.0. | | xmlrpc_error_number | "0" | PHP_INI_ALL | Available since PHP 4.1.0. |
Szczegóły i definicje dotyczące stałych
PHP_INI_* znajdują się w rozdziale Dodatek H.
To rozszerzenie nie posiada żadnych rodzajów zasobów. To rozszerzenie nie posiada żadnych stałych.
User Contributed Notesjohn # curioussymbols com
19-Oct-2005 01:37
I couldn't make the 'xmlrpc_errors' php.ini setting do anything
noticeable (PHP 4.3.11), so I used the following code to report errors
from my XMLRPC server. Hope it's helpful for someone.
<?php
function return_xmlrpc_error($errno,$errstr,$errfile=NULL,$errline=NULL
,$errcontext=NULL){
global $xmlrpc_server;
if(!$xmlrpc_server)die("Error: $errstr in '$errfile', line '$errline'");
header("Content-type: text/xml; charset=UTF-8");
print(xmlrpc_encode(array(
'faultCode'=>$errno
,'faultString'=>"Remote XMLRPC Error from
".$_SERVER['HTTP_HOST'].": $errstr in at $errfile:$errline"
)));
die();
}
set_error_handler('return_xmlrpc_error');
?>
In my server function, I just trigger_error("message",E_USER_ERROR)]
if something can't be completed.
Then on the client side,
<?php
$data =& xmlrpc_decode($response['body']);
if(xmlrpc_is_fault($data)){
trigger_error($data['faultString'],E_USER_ERROR);
}
?>
martin dot rode at programmfabrik dot de
04-Aug-2005 02:28
To connect to a python xmlrpc server I use:
function do_call($host, $port, $request) {
$url = "http://$host:$port/";
$header[] = "Content-type: text/xml";
$header[] = "Content-length: ".strlen($request);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
$data = curl_exec($ch);
if (curl_errno($ch)) {
print curl_error($ch);
} else {
curl_close($ch);
return $data;
}
}
$request = xmlrpc_encode_request('add', array(3, 4));
$response = do_call($host, $port, $request);
astrolox at lawyersonline dot co dot uk
22-Mar-2005 01:20
The PHP XML-RPC project at SourceForge makes life a hell of a lot easier. However, the project uses some function names which are identical to thoses provided by the XML-RPC extention.
If you are on a server with XML-RPC extension compiled in but wish to use the PHP based version then you will have to rename some of the functions.
I notice that sourceforce says there is activity on the project in 2005 but the last release was January 12, 2003.
I recommend that you use this not so friendly PHP extention if available. However this sourceforce project is still a good idea if you don't control which extenions are be available on the server.
http://phpxmlrpc.sourceforge.net/
rdude at fuzzelfish dot com
14-Mar-2005 09:57
An easier alternative to the built-in XML-RPC function is available at:
http://phpxmlrpc.sourceforge.net/
PHP XML-RPC is written purely in PHP, so there is no need to recompile to use the experiment XML-RPC extension. PHP XML-RPC is also definitely easier to use, especially if you are creating a server. Documentation is available at the above link.
Jerome Delamarche
14-Oct-2004 11: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 09: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 http://www.xmlrpc.com/spec), 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 12:20
steph at zend dot com
08-Jun-2004 01: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);
?>
/* servertest.php */
<?php
function lifecycle($method, $params) {
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();
xmlrpc_server_register_method($server, "cycle", "lifecycle");
$request = $HTTP_RAW_POST_DATA; $response = xmlrpc_server_call_method($server, $request, null);
header('Content-Type: text/xml');
print $response;
xmlrpc_server_destroy($server);
?>
andrej
25-Feb-2004 05:52
mboeren at php dot net
25-Feb-2004 01: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
function call($function)
{
$return = NULL;
$argv = func_get_args();
array_shift($argv); $this->__call($function, $argv, &$return);
return $return;
}
$result = $client->call('system.listMethods');
$sum = client->call('add', '1', '2');
?>
mboeren at php dot net
24-Feb-2004 04:01
I use the following code (requires the overload extension) to make developing clients easier:
<?php
include("utils/utils.php"); 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 07: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 07:23
mistcat attyatatat phreaker dootttt net
18-Apr-2003 12: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 02:21
bmichael at goldparrot dot com
09-Feb-2003 06: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 11:15
nospam at phppatterns dot com
07-Dec-2002 02:45
hfuecks at pinkgoblin dot com
26-Sep-2002 03:34
steve at orangeNOSPAMimagineering dot com
24-Aug-2002 10:32
There's a handy library by Keith Devens (version 2.2.1) at
http://www.keithdevens.com/software/xmlrpc/
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");
$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 );
foreach ( $result as $key => $value ) {
echo(" $key => $value \n");
}
?>
hfuecks at pinkgoblin dot com
15-Aug-2002 05: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 10:33
ivanr at webkreator dot com
21-Jun-2002 08:50
nic at uklinux dot NOSPAM dot net
24-Apr-2002 06:05
An alternative XML-RPC implementation is available at http://xmlrpc.usefulinc.com - 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 02: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 http://xmlrpc-epi.sourceforge.net/ is useful, however, for documentation.
ravan_n at hotmail dot com
27-Dec-2001 12:01
|