芝麻web文件管理V1.00
编辑当前文件:/home/strato/chroot/opt/RZphp80/includes/XML/RPC2/Backend.php
| * +-----------------------------------------------------------------------------+ * * @category XML * @package XML_RPC2 * @author Sergio Carvalho
* @copyright 2004-2006 Sergio Carvalho * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 * @version CVS: $Id$ * @link http://pear.php.net/package/XML_RPC2 */ // }}} // dependencies {{{ require_once 'XML/RPC2/Exception.php'; require_once 'PEAR.php'; // }}} /** * XML_RPC Backend class. The backend is responsible for the actual execution of * a request, as well as payload encoding and decoding. * * The only external usage of this class is when explicitely setting the backend, as in *
* XML_RPC2_Backend::setBackend('php'); * // or * XML_RPC2_Backend::setBackend('xmlrpcext'); *
* Note that if you do not explicitely set the backend, it will be selected automatically. * * Internally, this class provides methods to obtain the relevant backend classes: * - The server class * - The client class * - The value class * * @category XML * @package XML_RPC2 * @author Sergio Carvalho
* @copyright 2004-2006 Sergio Carvalho * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 * @link http://pear.php.net/package/XML_RPC2 */ abstract class XML_RPC2_Backend { // {{{ properties /** * current backend * * @var string */ protected static $currentBackend; // }}} // {{{ setBackend() /** * Backend setter. * * Currently, two backends exist: 'php' and 'XMLRPCext'. * The PHP backend has no external dependencies, while the xmlrpcext * requires the xmlrpc extension. * * The XMLRPCext backend is quite faster, and will be automatically * selected when no explicit backend has been set and the extension * is available. * * @param string The backend to select. Either 'php' or 'XMLRPCext'. */ public static function setBackend($backend) { $backend = ucfirst(strtolower($backend)); if ( $backend != 'Php' && $backend != 'Xmlrpcext' ) { throw new XML_RPC2_Exception(sprintf('Backend %s does not exist', $backend)); } if ( $backend == 'Xmlrpcext' && !function_exists('xmlrpc_server_create') && !( PEAR::loadExtension('php_xmlrpc') ) ) { throw new XML_RPC2_Exception('Unable to load xmlrpc extension.'); } self::$currentBackend = $backend; } // }}} // {{{ getBackend() /** * Backend getter. * * Return the current backend name. If no backend was previously selected * select one and set it. * * The xmlrpcext backend is preferred, and will be automatically * selected when no explicit backend has been set and the xmlrpc * extension exists. If it does not exist, then the php backend is * selected. * * @return string The current backend */ protected static function getBackend() { if (!isset(self::$currentBackend)) { try { self::setBackend('XMLRPCext'); // We prefer this one } catch (XML_RPC2_Exception $e) { // TODO According to PEAR CG logging should occur here self::setBackend('php'); // But will settle with this one in case of error } } return self::$currentBackend; } // }}} // {{{ getServerClassname() /** * Include the relevant php files for the server class, and return the backend server * class name. * * @return string The Server class name */ public static function getServerClassname() { require_once(sprintf('XML/RPC2/Backend/%s/Server.php', self::getBackend())); return sprintf('XML_RPC2_Backend_%s_Server', self::getBackend()); } // }}} // {{{ getClientClassname() /** * Include the relevant php files for the client class, and return the backend client * class name. * * @return string The Client class name */ public static function getClientClassname() { require_once(sprintf('XML/RPC2/Backend/%s/Client.php', self::getBackend())); return sprintf('XML_RPC2_Backend_%s_Client', self::getBackend()); } // }}} // {{{ getValueClassname() /** * Include the relevant php files for the value class, and return the backend value * class name. * * @return string The Value class name */ public static function getValueClassname() { require_once(sprintf('XML/RPC2/Backend/%s/Value.php', self::getBackend())); return sprintf('XML_RPC2_Backend_%s_Value', self::getBackend()); } // }}} }