Logotipo de Incutio Desde que conocí la Incutio XML-RPC Library no he necesitado nada más cuando he tenido la necesidad de implementar un cliente o un servidor XML-RPC en PHP.

He usado la Incutio XML-RPC en todos mis últimos proyectos, y Gesbit, el que me ocupa últimamente, no podía ser menos. Implementar un cliente o un servidor con esta biblioteca es tan sencillo que resulta hasta divertido, porque, simplemente, funciona.

Desde mi proyecto "aPHP", sin embargo, hice cambios en la biblioteca (muy sencillos) para adaptarla a PHP 5, y, para Gesbit, he añadido un miembro "timeout" a la clase que implementa los clientes XML-RPC: IXRClient. Pero, como digo, lo que pasma es la sencillez de uso de Incutio XML-RPC Library. He aquí un ejemplo de cliente que prueba el único método público de esta misma bitácora, gestionada con Gesbit:

require('IXRLibrary.inc.php');
$entryPoint = 'http://www.bitacora.davidesperalta.com/xmlrpc/';
$xmlRpcClient = new IXR_Client($entryPoint);
if($xmlRpcClient->query('gesbit.getTime')){
  $result = $xmlRpcClient->getResponse();
}else{
  die($xmlRpcClient->getErrorMessage());
}

El código anterior usa la biblioteca Incutio XML-RPC tal cual, para PHP 4, y, como puedes ver, no puede resultar más sencillo ejecutar un método remoto, en este caso del servidor XML-RPC de esta bitácora. Pero, no te pierdas el servidor. Lo que verás a continuación es el código actual del servidor XML-RPC en Gesbit, que implementa (por su cuenta) el método "gesbit.getTime", que ejecutaba el cliente visto antes:

class GbXmlRpcServer extends IXRIntrospectionServer 
{
  public function __construct(){
    parent::__construct();
    $this->Initialize();
  }
 
  public function getTime(){
    return date('H:i:s');
  }
 
  private function Initialize(){
    $this->addCallback(
      'gesbit.getTime', 
      'this:getTime',
      array('string'),
      'Returns the current server time'
    );
    $this->serve();
    return true;
  }  
}

He quitado los comentarios para hacer notar aún más su sencillez. Y date cuenta además que estoy aprovechándome además de la clase "IXRIntrospectionServer" y no "IXRServer", puesto que aquella viene a ser una versión avanzada de esta. Como te digo, si la biblioteca Incutio XML-RPC no existiera habría que inventarla.