⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 remote.php

📁 php-4.4.7学习linux时下载的源代码
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?php/** * PEAR_Remote * * PHP versions 4 and 5 * * LICENSE: This source file is subject to version 3.0 of the PHP license * that is available through the world-wide-web at the following URI: * http://www.php.net/license/3_0.txt.  If you did not receive a copy of * the PHP License and are unable to obtain it through the web, please * send a note to license@php.net so we can mail you a copy immediately. * * @category   pear * @package    PEAR * @author     Stig Bakken <ssb@php.net> * @author     Greg Beaver <cellog@php.net> * @copyright  1997-2005 The PHP Group * @license    http://www.php.net/license/3_0.txt  PHP License 3.0 * @version    CVS: $Id: Remote.php,v 1.34.2.15.2.3 2006/05/22 10:19:33 cellog Exp $ * @link       http://pear.php.net/package/PEAR * @since      File available since Release 0.1 *//** * needed for PEAR_Error */require_once 'PEAR.php';require_once 'PEAR/Config.php';/** * This is a class for doing remote operations against the central * PEAR database. * * @nodep XML_RPC_Value * @nodep XML_RPC_Message * @nodep XML_RPC_Client * @category   pear * @package    PEAR * @author     Stig Bakken <ssb@php.net> * @author     Greg Beaver <cellog@php.net> * @copyright  1997-2005 The PHP Group * @license    http://www.php.net/license/3_0.txt  PHP License 3.0 * @version    Release: @package_version@ * @link       http://pear.php.net/package/PEAR * @since      Class available since Release 0.1 */class PEAR_Remote extends PEAR{    // {{{ properties    var $config = null;    var $cache  = null;    /**     * @var PEAR_Registry     * @access private     */    var $_registry;    // }}}    // {{{ PEAR_Remote(config_object)    function PEAR_Remote(&$config)    {        $this->PEAR();        $this->config = &$config;        $this->_registry = &$this->config->getRegistry();    }    // }}}    // {{{ setRegistry()        function setRegistry(&$reg)    {        $this->_registry = &$reg;    }    // }}}    // {{{ getCache()    function getCache($args)    {        $id       = md5(serialize($args));        $cachedir = $this->config->get('cache_dir');        $filename = $cachedir . DIRECTORY_SEPARATOR . 'xmlrpc_cache_' . $id;        if (!file_exists($filename)) {            return null;        }        $fp = fopen($filename, 'rb');        if (!$fp) {            return null;        }        if (function_exists('file_get_contents')) {            fclose($fp);            $content = file_get_contents($filename);        } else {            $content  = fread($fp, filesize($filename));            fclose($fp);        }        $result   = array(            'age'        => time() - filemtime($filename),            'lastChange' => filemtime($filename),            'content'    => unserialize($content),            );        return $result;    }    // }}}    // {{{ saveCache()    function saveCache($args, $data)    {        $id       = md5(serialize($args));        $cachedir = $this->config->get('cache_dir');        if (!file_exists($cachedir)) {            System::mkdir(array('-p', $cachedir));        }        $filename = $cachedir.'/xmlrpc_cache_'.$id;        $fp = @fopen($filename, "wb");        if ($fp) {            fwrite($fp, serialize($data));            fclose($fp);        }    }    // }}}    // {{{ clearCache()    function clearCache($method, $args)    {        array_unshift($args, $method);        array_unshift($args, $this->config->get('default_channel')); // cache by channel        $id       = md5(serialize($args));        $cachedir = $this->config->get('cache_dir');        $filename = $cachedir.'/xmlrpc_cache_'.$id;        if (file_exists($filename)) {            @unlink($filename);        }    }    // }}}    // {{{ call(method, [args...])    function call($method)    {        $_args = $args = func_get_args();        $server_channel = $this->config->get('default_channel');        $channel = $this->_registry->getChannel($server_channel);        if (!PEAR::isError($channel)) {            $mirror = $this->config->get('preferred_mirror');            if ($channel->getMirror($mirror)) {                if ($channel->supports('xmlrpc', $method, $mirror)) {                    $server_channel = $server_host = $mirror; // use the preferred mirror                    $server_port = $channel->getPort($mirror);                } elseif (!$channel->supports('xmlrpc', $method)) {                    return $this->raiseError("Channel $server_channel does not " .                        "support xml-rpc method $method");                }            }            if (!isset($server_host)) {                if (!$channel->supports('xmlrpc', $method)) {                    return $this->raiseError("Channel $server_channel does not support " .                        "xml-rpc method $method");                } else {                    $server_host = $server_channel;                    $server_port = $channel->getPort();                }            }        } else {            return $this->raiseError("Unknown channel '$server_channel'");        }        array_unshift($_args, $server_channel); // cache by channel        $this->cache = $this->getCache($_args);        $cachettl = $this->config->get('cache_ttl');        // If cache is newer than $cachettl seconds, we use the cache!        if ($this->cache !== null && $this->cache['age'] < $cachettl) {            return $this->cache['content'];        }        if (extension_loaded("xmlrpc")) {            $result = call_user_func_array(array(&$this, 'call_epi'), $args);            if (!PEAR::isError($result)) {                $this->saveCache($_args, $result);            }            return $result;        } elseif (!@include_once 'XML/RPC.php') {            return $this->raiseError("For this remote PEAR operation you need to load the xmlrpc extension or install XML_RPC");        }        array_shift($args);        $username = $this->config->get('username');        $password = $this->config->get('password');        $eargs = array();        foreach($args as $arg) {            $eargs[] = $this->_encode($arg);        }        $f = new XML_RPC_Message($method, $eargs);        if ($this->cache !== null) {            $maxAge = '?maxAge='.$this->cache['lastChange'];        } else {            $maxAge = '';        }        $proxy_host = $proxy_port = $proxy_user = $proxy_pass = '';        if ($proxy = parse_url($this->config->get('http_proxy'))) {            $proxy_host = @$proxy['host'];            if (isset($proxy['scheme']) && $proxy['scheme'] == 'https') {                $proxy_host = 'https://' . $proxy_host;            }            $proxy_port = @$proxy['port'];            $proxy_user = @urldecode(@$proxy['user']);            $proxy_pass = @urldecode(@$proxy['pass']);        }        $shost = $server_host;        if ($channel->getSSL()) {            $shost = "https://$shost";        }        $c = new XML_RPC_Client('/' . $channel->getPath('xmlrpc')            . $maxAge, $shost, $server_port, $proxy_host, $proxy_port,            $proxy_user, $proxy_pass);        if ($username && $password) {            $c->setCredentials($username, $password);        }        if ($this->config->get('verbose') >= 3) {            $c->setDebug(1);        }        $r = $c->send($f);        if (!$r) {            return $this->raiseError("XML_RPC send failed");        }        $v = $r->value();        if ($e = $r->faultCode()) {            if ($e == $GLOBALS['XML_RPC_err']['http_error'] && strstr($r->faultString(), '304 Not Modified') !== false) {                return $this->cache['content'];            }            return $this->raiseError($r->faultString(), $e);        }        $result = XML_RPC_decode($v);        $this->saveCache($_args, $result);        return $result;    }    // }}}    // {{{ call_epi(method, [args...])    function call_epi($method)    {        do {            if (extension_loaded("xmlrpc")) {                break;            }            if (OS_WINDOWS) {                $ext = 'dll';            } elseif (PHP_OS == 'HP-UX') {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -