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

📄 wsdl.php.svn-base

📁 PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
            // to make everything callable and see how many problems that            // causes.            $opname_php = preg_replace('/[ .\-\(\)]+/', '_', $opname);            if (!$this->_validateString($opname_php)) {                return null;            }            if ($argarray) {                $argarray = "array($argarray)";            } else {                $argarray = 'null';            }            $class .= "    function &$opname_php($args)\n    {\n$comments$wrappers" .                "        \$result = \$this->call('$opname',\n" .                "                              \$v = $argarray,\n" .                "                              array('namespace' => '$namespace',\n" .                "                                    'soapaction' => '$soapaction',\n" .                "                                    'style' => '$opstyle',\n" .                "                                    'use' => '$use'" .                ($this->trace?",\n                                    'trace' => 1" : '') . "));\n" .                "        return \$result;\n" .                "    }\n";        }        $class .= "}\n";        return $class;    }    function generateAllProxies()    {        $proxycode = '';        foreach (array_keys($this->services[$this->service]['ports']) as $key) {            $port =& $this->services[$this->service]['ports'][$key];            $proxycode .= $this->generateProxyCode($port);        }        return $proxycode;    }    function &getProxy($port = '', $name = '')    {        if ($this->__isfault()) {            $fault =& $this->__getfault();            return $fault;        }        $multiport = count($this->services[$this->service]['ports']) > 1;        if (!$port) {            reset($this->services[$this->service]['ports']);            $port = current($this->services[$this->service]['ports']);        }        if ($multiport || $port) {            $classname = 'WebService_' . $this->service . '_' . $port['name'];        } else {            $classname = 'WebService_' . $this->service;        }        if ($name) {            $classname = $name . '_' . $classname;        }        $classname = preg_replace('/[ .\-\(\)]+/', '_', $classname);        if (!class_exists($classname)) {            $proxy = $this->generateProxyCode($port, $classname);            require_once 'SOAP/Client.php';            eval($proxy);        }        $proxy =& new $classname;        return $proxy;    }    function &_getComplexTypeForElement($name, $namespace)    {        $t = null;        if (isset($this->ns[$namespace]) &&            isset($this->elements[$this->ns[$namespace]][$name]['type'])) {            $type = $this->elements[$this->ns[$namespace]][$name]['type'];            $ns = $this->elements[$this->ns[$namespace]][$name]['namespace'];            if (isset($this->complexTypes[$ns][$type])) {                $t = $this->complexTypes[$ns][$type];            }        }        return $t;    }    function getComplexTypeNameForElement($name, $namespace)    {        $t = $this->_getComplexTypeForElement($name, $namespace);        if ($t) {            return $t['name'];        }        return null;    }    function getComplexTypeChildType($ns, $name, $child_ns, $child_name)    {        // is the type an element?        $t = $this->_getComplexTypeForElement($name, $ns);        if ($t) {            // no, get it from complex types directly            if (isset($t['elements'][$child_name]['type']))                return $t['elements'][$child_name]['type'];        }        return null;    }    function getSchemaType($type, $name, $type_namespace)    {        // see if it's a complex type so we can deal properly with        // SOAPENC:arrayType.        if ($name && $type) {            // XXX TODO:            // look up the name in the wsdl and validate the type.            foreach ($this->complexTypes as $ns => $types) {                if (array_key_exists($type, $types)) {                    if (array_key_exists('type', $types[$type])) {                        list($arraytype_ns, $arraytype, $array_depth) = isset($types[$type]['arrayType'])?                            $this->_getDeepestArrayType($types[$type]['namespace'], $types[$type]['arrayType'])                            : array($this->namespaces[$types[$type]['namespace']], null, 0);                        return array($types[$type]['type'], $arraytype, $arraytype_ns, $array_depth);                    }                    if (array_key_exists('arrayType', $types[$type])) {                        list($arraytype_ns, $arraytype, $array_depth) =                            $this->_getDeepestArrayType($types[$type]['namespace'], $types[$type]['arrayType']);                        return array('Array', $arraytype, $arraytype_ns, $array_depth);                    }                    if (array_key_exists('elements', $types[$type]) &&                        array_key_exists($name, $types[$type]['elements'])) {                        $type = $types[$type]['elements']['type'];                        return array($type, null, $this->namespaces[$types[$type]['namespace']], null);                    }                }            }        }        if ($type && $type_namespace) {            $arrayType = null;            // XXX TODO:            // this code currently handles only one way of encoding array types in wsdl            // need to do a generalized function to figure out complex types            $p = $this->ns[$type_namespace];            if ($p &&                array_key_exists($p, $this->complexTypes) &&                array_key_exists($type, $this->complexTypes[$p])) {                if ($arrayType = $this->complexTypes[$p][$type]['arrayType']) {                    $type = 'Array';                } elseif ($this->complexTypes[$p][$type]['order']=='sequence' &&                          array_key_exists('elements', $this->complexTypes[$p][$type])) {                    reset($this->complexTypes[$p][$type]['elements']);                    // assume an array                    if (count($this->complexTypes[$p][$type]['elements']) == 1) {                        $arg = current($this->complexTypes[$p][$type]['elements']);                        $arrayType = $arg['type'];                        $type = 'Array';                    } else {                        foreach ($this->complexTypes[$p][$type]['elements'] as $element) {                            if ($element['name'] == $type) {                                $arrayType = $element['type'];                                $type = $element['type'];                            }                        }                    }                } else {                    $type = 'Struct';                }                return array($type, $arrayType, $type_namespace, null);            }        }        return array(null, null, null, null);    }    /**     * Recurse through the WSDL structure looking for the innermost array type     * of multi-dimensional arrays.     *     * Takes a namespace prefix and a type, which can be in the form 'type' or     * 'type[]', and returns the full namespace URI, the type of the most     * deeply nested array type found, and the number of levels of nesting.     *     * @access private     * @return mixed array or nothing     */    function _getDeepestArrayType($nsPrefix, $arrayType)    {        static $trail = array();        $arrayType = ereg_replace('\[\]$', '', $arrayType);        // Protect against circular references XXX We really need to remove        // trail from this altogether (it's very inefficient and in the wrong        // place!) and put circular reference checking in when the WSDL info        // is generated in the first place        if (array_search($nsPrefix . ':' . $arrayType, $trail)) {            return array(null, null, -count($trail));        }        if (array_key_exists($nsPrefix, $this->complexTypes) &&            array_key_exists($arrayType, $this->complexTypes[$nsPrefix]) &&            array_key_exists('arrayType', $this->complexTypes[$nsPrefix][$arrayType])) {            $trail[] = $nsPrefix . ':' . $arrayType;            $result = $this->_getDeepestArrayType($this->complexTypes[$nsPrefix][$arrayType]['namespace'],                                                  $this->complexTypes[$nsPrefix][$arrayType]['arrayType']);            return array($result[0], $result[1], $result[2] + 1);        }        return array($this->namespaces[$nsPrefix], $arrayType, 0);    }}class SOAP_WSDL_Cache extends SOAP_Base{    // Cache settings    /**     * Use WSDL cache     *     * @var boolean     */    var $_cacheUse = null;    /**     * Cache max lifetime (in seconds)     *     * @var int     */    var $_cacheMaxAge = null;    /**     * SOAP_WSDL_Cache constructor     *     * @param  boolean use caching     * @param  int     cache max lifetime (in seconds)     * @access public     */    function SOAP_WSDL_Cache($cacheUse = WSDL_CACHE_USE,                             $cacheMaxAge = WSDL_CACHE_MAX_AGE)    {        parent::SOAP_Base('WSDLCACHE');        $this->_cacheUse = $cacheUse;        $this->_cacheMaxAge = $cacheMaxAge;    }    /**     * _cacheDir     * return the path to the cache, if it doesn't exist, make it     */    function _cacheDir()    {        $dir = getenv("WSDLCACHE");        if (!$dir) $dir = " ./wsdlcache";        @mkdir($dir, 0700);        return $dir;    }    /**     * Retrieves a file from cache if it exists, otherwise retreive from net,     * add to cache, and return from cache.     *     * @param  string   URL to WSDL     * @param  array    proxy parameters     * @param  int      expected MD5 of WSDL URL     * @access public     * @return string  data     */    function get($wsdl_fname, $proxy_params = array(), $cache = 0)    {        $cachename = $md5_wsdl = $file_data = '';        if ($this->_cacheUse) {            // Try to retrieve WSDL from cache            $cachename = SOAP_WSDL_Cache::_cacheDir() . '/' . md5($wsdl_fname). ' .wsdl';            if (file_exists($cachename)) {                $wf = fopen($cachename, 'rb');                if ($wf) {                    // Reading cached file                    $file_data = fread($wf, filesize($cachename));                    $md5_wsdl = md5($file_data);                    fclose($wf);                }                if ($cache) {                    if ($cache != $md5_wsdl) {                        return $this->_raiseSoapFault('WSDL Checksum error!', $wsdl_fname);                    }                } else {                    $fi = stat($cachename);                    $cache_mtime = $fi[8];                    //print cache_mtime, time()                    if ($cache_mtime + $this->_cacheMaxAge < time()) {                        // expired                        $md5_wsdl = ''; // refetch                    }                }            }        }        if (!$md5_wsdl) {            // Not cached or not using cache. Retrieve WSDL from URL            // is it a local file?            // this section should be replace by curl at some point            if (!preg_match('/^(https?|file):\/\//', $wsdl_fname)) {                if (!file_exists($wsdl_fname)) {                    return $this->_raiseSoapFault("Unable to read local WSDL $wsdl_fname", $wsdl_fname);                }                if (function_exists('file_get_contents')) {                    $file_data = file_get_contents($wsdl_fname);                } else {                    $file_data = implode('',file($wsdl_fname));                }            } else {                $uri = explode('?', $wsdl_fname);                $rq =& new HTTP_Request($uri[0], $proxy_params);                // the user agent HTTP_Request uses fouls things up                if (isset($uri[1])) {                    $rq->addRawQueryString($uri[1]);                }                if (isset($proxy_params['proxy_host']) &&                    isset($proxy_params['proxy_port']) &&                    isset($proxy_params['proxy_user']) &&                    isset($proxy_params['proxy_pass'])) {                    $rq->setProxy($proxy_params['proxy_host'], $proxy_params['proxy_port'],                                  $proxy_params['proxy_user'], $proxy_params['proxy_pass']);                } elseif (isset($proxy_params['proxy_host']) &&                          isset($proxy_params['proxy_port'])) {

⌨️ 快捷键说明

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