Hola!.
Estoy intentando hacer funcionar un cliente y servidor XML-RPC en PHP.
He buscado en bibliografía y en internet ejemplos, pero no ha funcionado ninguna de las implementaciones.
En un ejemplo con el cuál estoy ocupado, al ir comentando líneas y hacer pruebas.. creo que donde se queda la ejecución es en el lado cliente en "$r=$c->send($f);". Como si no lograra establecer comunicación con el servidor.
No sé si se tratará de algo referido con la configuración de PHP, o con librerías xml, ....?? ??
Pego el código.. de ambos "cliente y servidor".. por si alguien puede aclararme.
Desde ya.. muchas gracias.
CLIENTE ------------------------ dv_clinte.php
<form name="form1" method="post" action="dv_cliente.php">
<input type="text" name="txtIsbn">
<input type="submit" name="Submit" value="Buscar">
</form>
<?php
include("xmlrpc-2.2.1/lib/xmlrpc.inc");
$isbn = $_POST['txtIsbn'];
echo $isbn;
if (isset($isbn)){
$f=new xmlrpcmsg('libros.buscaIsbn',array(new xmlrpcval($isbn, "int")));
print "<pre>".htmlentities($f->serialize())."</pre>\n";
$c=new xmlrpc_client("http://localhost/xml-rpc/dv_servidor.php");
//$c->setDebug(0);
$r=$c->send($f);
if(!$r){
die("Falló SEND");
echo ("fallo");
}
$v=$r->value();
if(!$r->faultCode()){
print "Título del libro ".$isbn." es ".$v->scalarval()."<BR>";
}else{
print "Falla: ";
print "Número de error: " .$r->faultCode()." Descripción del error '".$r->faultString()."'<BR>";
}
}
?>
SERVIDOR ------------------------ dv_servidor.php
<?php
//Ejemplo de un servidor XML-RPC en PHP
//Recibe un ISBN y regresa el Título //del libro.
include("xmlrpc-2.2.1/lib/xmlrpc.inc");
include("xmlrpc-2.2.1/lib/xmlrpcs.inc");
function BuscaIsbn($NoIsbn) {
global $NoError;
$err="";
// Obtenemos el parametro
$ParIsbn=$NoIsbn->getParam(0);
// Vemos si es del tipo correcto
if(isset($ParIsbn) && ($ParIsbn->scalartyp()=="int")){
// Obtenemos el valor numerico
$isbn=$ParIsbn->scalarval();
// Buscamos el libro
switch($isbn){
case 1: $titulo="PHP";
break;
case 2: $titulo="XML_RPC";
break;
case 3: $titulo="Sitios web";
break;
case 4: $titulo="Linux";
break;
default:$NoError=1;
$err="No hay libro ". "con el ISBN '". $isbn . "'";
}
}else {
// No es entero
$err="Se requiere un número";}
// Creamos la respuesta
if ($err){
// Si hay error
return new xmlrpcresp(0, $NoError, $err);
}else{
// Si no hay error
return new xmlrpcresp(new xmlrpcval($titulo));
}
}
//Creamos el servidor
$s=new xmlrpc_server(array("libros.buscaIsbn" =>array("function" => "BuscaIsbn")));
?>