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

📄 nusoap.php

📁 GForge 3.0 协作开发平台 支持CVS, mailing lists, bug tracking, message boards/forums, task management, perman
💻 PHP
📖 第 1 页 / 共 5 页
字号:
*/function timestamp_to_iso8601($timestamp,$utc=true){	$datestr = date('Y-m-d\TH:i:sO',$timestamp);	if($utc){		$eregStr =		'([0-9]{4})-'.	// centuries & years CCYY-		'([0-9]{2})-'.	// months MM-		'([0-9]{2})'.	// days DD		'T'.			// separator T		'([0-9]{2}):'.	// hours hh:		'([0-9]{2}):'.	// minutes mm:		'([0-9]{2})(\.[0-9]*)?'. // seconds ss.ss...		'(Z|[+\-][0-9]{2}:?[0-9]{2})?'; // Z to indicate UTC, -/+HH:MM:SS.SS... for local tz's		if(ereg($eregStr,$datestr,$regs)){			return sprintf('%04d-%02d-%02dT%02d:%02d:%02dZ',$regs[1],$regs[2],$regs[3],$regs[4],$regs[5],$regs[6]);		}		return false;	} else {		return $datestr;	}}/*** convert ISO 8601 compliant date string to unix timestamp** @param    string $datestr ISO 8601 compliant date string* @access   public*/function iso8601_to_timestamp($datestr){	$eregStr =	'([0-9]{4})-'.	// centuries & years CCYY-	'([0-9]{2})-'.	// months MM-	'([0-9]{2})'.	// days DD	'T'.			// separator T	'([0-9]{2}):'.	// hours hh:	'([0-9]{2}):'.	// minutes mm:	'([0-9]{2})(\.[0-9]+)?'. // seconds ss.ss...	'(Z|[+\-][0-9]{2}:?[0-9]{2})?'; // Z to indicate UTC, -/+HH:MM:SS.SS... for local tz's	if(ereg($eregStr,$datestr,$regs)){		// not utc		if($regs[8] != 'Z'){			$op = substr($regs[8],0,1);			$h = substr($regs[8],1,2);			$m = substr($regs[8],strlen($regs[8])-2,2);			if($op == '-'){				$regs[4] = $regs[4] + $h;				$regs[5] = $regs[5] + $m;			} elseif($op == '+'){				$regs[4] = $regs[4] - $h;				$regs[5] = $regs[5] - $m;			}		}		return strtotime("$regs[1]-$regs[2]-$regs[3] $regs[4]:$regs[5]:$regs[6]Z");	} else {		return false;	}}?><?php/*** soap_fault class, allows for creation of faults* mainly used for returning faults from deployed functions* in a server instance.* @author   Dietrich Ayala <dietrich@ganx4.com>* @version  v 0.6.3* @access public*/class soap_fault extends nusoap_base {	var $faultcode;	var $faultactor;	var $faultstring;	var $faultdetail;	/**	* constructor    *    * @param string $faultcode (client | server)    * @param string $faultactor only used when msg routed between multiple actors    * @param string $faultstring human readable error message    * @param string $faultdetail	*/	function soap_fault($faultcode,$faultactor='',$faultstring='',$faultdetail=''){		$this->faultcode = $faultcode;		$this->faultactor = $faultactor;		$this->faultstring = $faultstring;		$this->faultdetail = $faultdetail;	}	/**	* serialize a fault	*	* @access   public	*/	function serialize(){		$ns_string = '';		foreach($this->namespaces as $k => $v){			$ns_string .= "\n  xmlns:$k=\"$v\"";		}		$return_msg =			'<?xml version="1.0"?'.">\n".			'<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"'.$ns_string.">\n".				'<SOAP-ENV:Body>'.				'<SOAP-ENV:Fault>'.					'<faultcode>'.$this->faultcode.'</faultcode>'.					'<faultactor>'.$this->faultactor.'</faultactor>'.					'<faultstring>'.$this->faultstring.'</faultstring>'.					'<detail>'.$this->serialize_val($this->faultdetail).'</detail>'.				'</SOAP-ENV:Fault>'.				'</SOAP-ENV:Body>'.			'</SOAP-ENV:Envelope>';		return $return_msg;	}}?><?php/*** parses an XML Schema, allows access to it's data, other utility methods* no validation... yet.* very experimental and limited. As is discussed on XML-DEV, I'm one of the people* that just doesn't have time to read the spec(s) thoroughly, and just have a couple of trusty* tutorials I refer to :)** @author   Dietrich Ayala <dietrich@ganx4.com>* @version  v 0.6.3* @access   public*/class XMLSchema extends nusoap_base  {		// files	var $schema = '';	var $xml = '';	// define internal arrays of bindings, ports, operations, messages, etc.	var $complexTypes = array();	// target namespace	var $schemaTargetNamespace = '';	// parser vars	var $parser;	var $position;	var $depth = 0;	var $depth_array = array();    	/**	* constructor	*	* @param    string $schema schema document URI	* @param    string $xml xml document URI	* @access   public	*/	function XMLSchema($schema='',$xml=''){		$this->debug('xmlschema class instantiated, inside constructor');		// files		$this->schema = $schema;		$this->xml = $xml;		// parse schema file		if($schema != ''){			$this->debug('initial schema file: '.$schema);			$this->parseFile($schema);		}		// parse xml file		if($xml != ''){			$this->debug('initial xml file: '.$xml);			$this->parseFile($xml);		}	}    /**    * parse an XML file    *    * @param string $xml, path/URL to XML file    * @param string $type, (schema | xml)	* @return boolean    * @access public    */	function parseFile($xml,$type){		// parse xml file		if($xml != ""){			$this->debug('parsing $xml');			$xmlStr = @join("",@file($xml));			if($xmlStr == ""){				$this->setError('No file at the specified URL: '.$xml);			return false;			} else {				$this->parseString($xmlStr,$type);			return true;			}		}		return false;	}	/**	* parse an XML string	*	* @param    string $xml path or URL    * @param string $type, (schema|xml)	* @access   private	*/	function parseString($xml,$type){		// parse xml string		if($xml != ""){	    	// Create an XML parser.	    	$this->parser = xml_parser_create();	    	// Set the options for parsing the XML data.	    	xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);	    	// Set the object for the parser.	    	xml_set_object($this->parser, $this);	    	// Set the element handlers for the parser.			if($type == "schema"){		    	xml_set_element_handler($this->parser, 'schemaStartElement','schemaEndElement');		    	xml_set_character_data_handler($this->parser,'schemaCharacterData');			} elseif($type == "xml"){				xml_set_element_handler($this->parser, 'xmlStartElement"','xmlEndElement');		    	xml_set_character_data_handler($this->parser,'xmlCharacterData');			}		    // Parse the XML file.		    if(!xml_parse($this->parser,$xml,true)){			// Display an error message.				$errstr = sprintf('XML error on line %d: %s',				xml_get_current_line_number($this->parser),				xml_error_string(xml_get_error_code($this->parser))				);				$this->debug('XML parse error: '.$errstr);				$this->setError('Parser error: '.$errstr);	    	}            			xml_parser_free($this->parser);		} else{			$this->debug('no xml passed to parseString()!!');			$this->setError('no xml passed to parseString()!!');		}	}	/**	* start-element handler	*	* @param    string $parser XML parser object	* @param    string $name element name	* @param    string $attrs associative array of attributes	* @access   private	*/	function schemaStartElement($parser, $name, $attrs) {				// position in the total number of elements, starting from 0		$pos = $this->position++;		$depth = $this->depth++;		// set self as current value for this depth		$this->depth_array[$depth] = $pos;		// get element prefix		if($prefix = $this->getPrefix($name)){			// get unqualified name			$name = $this->getLocalPart($name);		} else {        	$prefix = '';        }		        // loop thru attributes, expanding, and registering namespace declarations        if(count($attrs) > 0){        	foreach($attrs as $k => $v){                // if ns declarations, add to class level array of valid namespaces				if(ereg("^xmlns",$k)){                	//$this->xdebug("$k: $v");                	//$this->xdebug('ns_prefix: '.$this->getPrefix($k));                	if($ns_prefix = substr(strrchr($k,':'),1)){						$this->namespaces[$ns_prefix] = $v;					} else {						$this->namespaces['ns'.(count($this->namespaces)+1)] = $v;					}					if($v == 'http://www.w3.org/2001/XMLSchema' || $v == 'http://www.w3.org/1999/XMLSchema'){						$this->XMLSchemaVersion = $v;						$this->namespaces['xsi'] = $v.'-instance';					}				}                // expand each attribute                $k = strpos($k,':') ? $this->expandQname($k) : $k;                $v = strpos($v,':') ? $this->expandQname($v) : $v;        		$eAttrs[$k] = $v;        	}        	$attrs = $eAttrs;        } else {        	$attrs = array();        }		// find status, register data		switch($name){			case ('all'|'choice'|'sequence'):				//$this->complexTypes[$this->currentComplexType]['compositor'] = 'all';				$this->complexTypes[$this->currentComplexType]['compositor'] = $name;				if($name == 'all'){					$this->complexTypes[$this->currentComplexType]['phpType'] = 'struct';				}			break;			case 'attribute':            	//$this->xdebug("parsing attribute $attrs[name] $attrs[ref] of value: ".$attrs['http://schemas.xmlsoap.org/wsdl/:arrayType']);                if(isset($attrs['name'])){					$this->attributes[$attrs['name']] = $attrs;					$aname = $attrs['name'];				} elseif($attrs['ref']){					$aname = $attrs['ref'];                    $this->attributes[$attrs['ref']] = $attrs;				}                				if(isset($this->currentComplexType)){					$this->complexTypes[$this->currentComplexType]['attrs'][$aname] = $attrs;				} elseif(isset($this->currentElement)){					$this->elements[$this->currentElement]['attrs'][$aname] = $attrs;				}				// arrayType attribute				if($this->getLocalPart($aname) == 'arrayType'){                	$this->complexTypes[$this->currentComplexType]['phpType'] = 'array';					if(isset($attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'])){						$v = $attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'];					} else {						$v = '';					}                    if(strpos($v,'[,]')){                        $this->complexTypes[$this->currentComplexType]['multidimensional'] = true;                    }                    $v = substr($v,0,strpos($v,'[')); // clip the []                    if(!strpos($v,':') && isset($this->typemap[$this->XMLSchemaVersion][$v])){                        $v = $this->XMLSchemaVersion.':'.$v;                    }                    $this->complexTypes[$this->currentComplexType]['arrayType'] = $v;				}			break;			case 'complexType':				if(isset($attrs['name'])){					$this->currentElement = false;					$this->currentComplexType = $attrs['name'];					$this->complexTypes[$this->currentComplexType] = $attrs;					$this->complexTypes[$this->currentComplexType]['typeClass'] = 'complexType';					if(isset($attrs['base']) && ereg(':Array$',$attrs['base'])){						$this->complexTypes[$this->currentComplexType]['phpType'] = 'array';					} else {						$this->complexTypes[$this->currentComplexType]['phpType'] = 'struct';					}					$this->xdebug('processing complexType '.$attrs['name']);				}			break;			case 'element':				if(isset($attrs['type'])){					$this->xdebug("processing element ".$attrs['name']);					$this->currentElement = $attrs['name'];					$this->elements[ $attrs['name'] ] = $attrs;					$this->elements[ $attrs['name'] ]['typeClass'] = 'element';					$ename = $attrs['name'];				} elseif(isset($attrs['ref'])){					$ename = $attrs['ref'];				} else {					$this->xdebug('adding complexType '.$attrs['name']);					$this->currentComplexType = $attrs['name'];					$this->complexTypes[ $attrs['name'] ] = $attrs;					$this->complexTypes[ $attrs['name'] ]['element'] = 1;					$this->complexTypes[$this->currentComplexType]['phpType'] = 'struct';				}				if(isset($ename) && $this->currentComplexType){					$this->complexTypes[$this->currentComplexType]['elements'][$ename] = $attrs;				}			break;			case 'restriction':				$this->xdebug("in restriction for ct: $this->currentComplexType and ce: $this->currentElement");				if($this->currentElement){					$this->elements[$this->currentElement]['type'] = $attrs['base'];				} elseif($this->currentComplexType){					$this->complexTypes[$this->currentComplexType]['restrictionBase'] = $attrs['base'];					if(strstr($attrs['base'],':') == ':Array'){						$this->complexTypes[$this->currentComplexType]['phpType'] = 'array';					}				}			break;			case 'schema':				$this->schema = $attrs;				$this->schema['schemaVersion'] = $this->getNamespaceFromPrefix($prefix);			break;			case 'simpleType':				$this->currentElement = $attrs['name'];				$this->elements[ $attrs['name'] ] = $attrs;				$this->elements[ $attrs['name'] ]['typeClass'] = 'element';			break;		}	}	/**	* end-element handler	*	* @param    string $parser XML parser object	* @param    string $name element name	* @access   private	*/	function schemaEndElement($parser, $name) {		// position of current element is equal to the last value left in depth_array for my depth		if(isset($this->depth_array[$this->depth])){        	$pos = $this->depth_array[$this->depth];        }		// bring depth down a notch		$this->depth--;		// move on...		if($name == 'complexType'){			$this->currentComplexType = false;			$this->currentElement = false;		}		if($name == 'element'){			$this->currentElement = false;		}	}	/**	* element content handler	*	* @param    string $parser XML parser object	* @param    string $data element content	* @access   private	*/	function schemaCharacterData($parser, $data){		$pos = $this->depth_array[$this->depth];		$this->message[$pos]['cdata'] .= $data;	}	/**

⌨️ 快捷键说明

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