📄 xajax.inc.php
字号:
} else { $sPreResponse = $mPreResponse; } if (is_a($sPreResponse, "xajaxResponse")) { $sPreResponse = $sPreResponse->getXML(); } if ($bEndRequest) $sResponse = $sPreResponse; } if (!$bEndRequest) { if (!$this->_isFunctionCallable($sFunctionName)) { $objResponse = new xajaxResponse(); $objResponse->addAlert("The Registered Function $sFunctionName Could Not Be Found."); $sResponse = $objResponse->getXML(); } else { if ($bFunctionIsCatchAll) { $aArgs = array($sFunctionNameForSpecial, $aArgs); } $sResponse = $this->_callFunction($sFunctionName, $aArgs); } if (is_a($sResponse, "xajaxResponse")) { $sResponse = $sResponse->getXML(); } if (!is_string($sResponse) || strpos($sResponse, "<xjx>") === FALSE) { $objResponse = new xajaxResponse(); $objResponse->addAlert("No XML Response Was Returned By Function $sFunctionName."); $sResponse = $objResponse->getXML(); } else if ($sPreResponse != "") { $sNewResponse = new xajaxResponse(); $sNewResponse->loadXML($sPreResponse); $sNewResponse->loadXML($sResponse); $sResponse = $sNewResponse->getXML(); } } } $sContentHeader = "Content-type: text/xml;"; if ($this->sEncoding && strlen(trim($this->sEncoding)) > 0) $sContentHeader .= " charset=".$this->sEncoding; header($sContentHeader); if ($this->bErrorHandler && !empty( $GLOBALS['xajaxErrorHandlerText'] )) { $sErrorResponse = new xajaxResponse(); $sErrorResponse->addAlert("** PHP Error Messages: **" . $GLOBALS['xajaxErrorHandlerText']); if ($this->sLogFile) { $fH = @fopen($this->sLogFile, "a"); if (!$fH) { $sErrorResponse->addAlert("** Logging Error **\n\nxajax was unable to write to the error log file:\n" . $this->sLogFile); } else { fwrite($fH, "** xajax Error Log - " . strftime("%b %e %Y %I:%M:%S %p") . " **" . $GLOBALS['xajaxErrorHandlerText'] . "\n\n\n"); fclose($fH); } } $sErrorResponse->loadXML($sResponse); $sResponse = $sErrorResponse->getXML(); } if ($this->bCleanBuffer) while (@ob_end_clean()); print $sResponse; if ($this->bErrorHandler) restore_error_handler(); if ($this->bExitAllowed) exit(); } // printJavascript() prints the xajax javascript code into your page by printing // the output of the getJavascript() method. It should only be called between the // <head> </head> tags in your HTML page. Remember, if you only want to obtain the // result of this function, use getJavascript() instead. // $sJsURI is the relative address of the folder where xajax has been installed. // For instance, if your PHP file is "http://www.myserver.com/myfolder/mypage.php" // and xajax was installed in "http://www.myserver.com/anotherfolder", then // $sJsURI should be set to "../anotherfolder". Defaults to assuming xajax is in // the same folder as your PHP file. // $sJsFile is the relative folder/file pair of the xajax Javascript engine located // within the xajax installation folder. Defaults to xajax_js/xajax.js. // usage: // <head> // ... // < ?php $xajax->printJavascript(); ? > function printJavascript($sJsURI="", $sJsFile=NULL, $sJsFullFilename=NULL) { print $this->getJavascript($sJsURI, $sJsFile, $sJsFullFilename); } // getJavascript() returns the xajax javascript code that should be added to // your HTML page between the <head> </head> tags. See printJavascript() // for information about the function arguments. // usage: // < ?php $xajaxJSHead = $xajax->getJavascript(); ? > // <head> // ... // < ?php echo $xajaxJSHead; ? > function getJavascript($sJsURI="", $sJsFile=NULL, $sJsFullFilename=NULL) { if ($sJsFile == NULL) $sJsFile = "xajax_js/xajax.js"; if ($sJsURI != "" && substr($sJsURI, -1) != "/") $sJsURI .= "/"; $html = "\t<script type=\"text/javascript\">\n"; $html .= "var xajaxRequestUri=\"".$this->sRequestURI."\";\n"; $html .= "var xajaxDebug=".($this->bDebug?"true":"false").";\n"; $html .= "var xajaxStatusMessages=".($this->bStatusMessages?"true":"false").";\n"; $html .= "var xajaxWaitCursor=".($this->bWaitCursor?"true":"false").";\n"; $html .= "var xajaxDefinedGet=".XAJAX_GET.";\n"; $html .= "var xajaxDefinedPost=".XAJAX_POST.";\n"; foreach($this->aFunctions as $sFunction => $bExists) { $html .= $this->_wrap($sFunction,$this->aFunctionRequestTypes[$sFunction]); } $html .= "</script>\n"; // Create a compressed file if necessary if ($sJsFullFilename) { $realJsFile = $sJsFullFilename; } else { $realPath = realpath(dirname(__FILE__)); $realJsFile = $realPath . "/". $sJsFile; } $srcFile = str_replace(".js", "_uncompressed.js", $realJsFile); if (!file_exists($srcFile)) { trigger_error("The xajax uncompressed Javascript file could not be found in the <b>" . dirname($realJsFile) . "</b> folder. Error ", E_USER_ERROR); } if ($this->bDebug) { if (!@copy($srcFile, $realJsFile)) { trigger_error("The xajax uncompressed javascript file could not be copied to the <b>" . dirname($realJsFile) . "</b> folder. Error ", E_USER_ERROR); } } else if (!file_exists($realJsFile)) { require(dirname($realJsFile) . "/xajaxCompress.php"); $javaScript = implode('', file($srcFile)); $compressedScript = xajaxCompressJavascript($javaScript); $fH = @fopen($realJsFile, "w"); if (!$fH) { trigger_error("The xajax compressed javascript file could not be written in the <b>" . dirname($realJsFile) . "</b> folder. Error ", E_USER_ERROR); } else { fwrite($fH, $compressedScript); fclose($fH); } } $html .= "\t<script type=\"text/javascript\" src=\"" . $sJsURI . $sJsFile . "\"></script>\n"; return $html; } // _detectURL() returns the current URL based upon the SERVER vars // used internally function _detectURI() { $aURL = array(); // Try to get the request URL if (!empty($_SERVER['REQUEST_URI'])) { $aURL = parse_url($_SERVER['REQUEST_URI']); } // Fill in the empty values if (empty($aURL['scheme'])) { if (!empty($_SERVER['HTTP_SCHEME'])) { $aURL['scheme'] = $_SERVER['HTTP_SCHEME']; } else { $aURL['scheme'] = (!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) != 'off') ? 'https' : 'http'; } } if (empty($aURL['host'])) { if (!empty($_SERVER['HTTP_HOST'])) { if (strpos($_SERVER['HTTP_HOST'], ':') > 0) { list($aURL['host'], $aURL['port']) = explode(':', $_SERVER['HTTP_HOST']); } else { $aURL['host'] = $_SERVER['HTTP_HOST']; } } else if (!empty($_SERVER['SERVER_NAME'])) { $aURL['host'] = $_SERVER['SERVER_NAME']; } else { print "xajax Error: xajax failed to automatically identify your Request URI."; print "Please set the Request URI explicitly when you instantiate the xajax object."; exit(); } } if (empty($aURL['port']) && !empty($_SERVER['SERVER_PORT'])) { $aURL['port'] = $_SERVER['SERVER_PORT']; } if (empty($aURL['path'])) { if (!empty($_SERVER['PATH_INFO'])) { $sPath = parse_url($_SERVER['PATH_INFO']); } else { $sPath = parse_url($_SERVER['PHP_SELF']); } $aURL['path'] = $sPath['path']; unset($sPath); } if (!empty($aURL['query'])) { $aURL['query'] = '?'.$aURL['query']; } // Build the URL: Start with scheme, user and pass $sURL = $aURL['scheme'].'://'; if (!empty($aURL['user'])) { $sURL.= $aURL['user']; if (!empty($aURL['pass'])) { $sURL.= ':'.$aURL['pass']; } $sURL.= '@'; } // Add the host $sURL.= $aURL['host']; // Add the port if needed if (!empty($aURL['port']) && (($aURL['scheme'] == 'http' && $aURL['port'] != 80) || ($aURL['scheme'] == 'https' && $aURL['port'] != 443))) { $sURL.= ':'.$aURL['port']; } // Add the path and the query string $sURL.= $aURL['path'].@$aURL['query']; // Clean up unset($aURL); return $sURL; } // returns true if the function name is associated with an object callback, // false if not. // user internally function _isObjectCallback($sFunction) { if (array_key_exists($sFunction, $this->aObjects)) return true; return false; } // return true if the function or object callback can be called, false if not // user internally function _isFunctionCallable($sFunction) { if ($this->_isObjectCallback($sFunction)) { if (is_object($this->aObjects[$sFunction][0])) { return method_exists($this->aObjects[$sFunction][0], $this->aObjects[$sFunction][1]); } else { return is_callable($this->aObjects[$sFunction]); } } else { return function_exists($sFunction); } } // calls the function, class method, or object method with the supplied arguments // user internally function _callFunction($sFunction, $aArgs) { if ($this->_isObjectCallback($sFunction)) { $mReturn = call_user_func_array($this->aObjects[$sFunction], $aArgs); } else { $mReturn = call_user_func_array($sFunction, $aArgs); } return $mReturn; } // generates the javascript wrapper for the specified PHP function // used internally function _wrap($sFunction,$sRequestType=XAJAX_POST) { $js = "function ".$this->sWrapperPrefix."$sFunction(){return xajax.call(\"$sFunction\", arguments, ".$sRequestType.");}\n"; return $js; } // _xmlToArray() takes a string containing xajax xjxobj xml or xjxquery xml // and builds an array representation of it to pass as an argument to // the php function being called. Returns an array. // used internally function _xmlToArray($rootTag, $sXml) { $aArray = array(); $sXml = str_replace("<$rootTag>","<$rootTag>|~|",$sXml); $sXml = str_replace("</$rootTag>","</$rootTag>|~|",$sXml); $sXml = str_replace("<e>","<e>|~|",$sXml); $sXml = str_replace("</e>","</e>|~|",$sXml); $sXml = str_replace("<k>","<k>|~|",$sXml); $sXml = str_replace("</k>","|~|</k>|~|",$sXml); $sXml = str_replace("<v>","<v>|~|",$sXml); $sXml = str_replace("</v>","|~|</v>|~|",$sXml); $sXml = str_replace("<q>","<q>|~|",$sXml); $sXml = str_replace("</q>","|~|</q>|~|",$sXml); $this->aObjArray = explode("|~|",$sXml); $this->iPos = 0; $aArray = $this->_parseObjXml($rootTag); return $aArray; } // _parseObjXml() is a recursive function that generates an array from the // contents of $this->aObjArray. Returns an array. // used internally function _parseObjXml($rootTag) { $aArray = array(); if ($rootTag == "xjxobj") { while(!stristr($this->aObjArray[$this->iPos],"</xjxobj>")) { $this->iPos++; if(stristr($this->aObjArray[$this->iPos],"<e>")) { $key = ""; $value = null; $this->iPos++; while(!stristr($this->aObjArray[$this->iPos],"</e>")) { if(stristr($this->aObjArray[$this->iPos],"<k>")) { $this->iPos++; while(!stristr($this->aObjArray[$this->iPos],"</k>")) { $key .= $this->aObjArray[$this->iPos]; $this->iPos++; } } if(stristr($this->aObjArray[$this->iPos],"<v>")) { $this->iPos++; while(!stristr($this->aObjArray[$this->iPos],"</v>")) { if(stristr($this->aObjArray[$this->iPos],"<xjxobj>")) { $value = $this->_parseObjXml("xjxobj"); $this->iPos++; } else { $value .= $this->aObjArray[$this->iPos]; } $this->iPos++; } } $this->iPos++; } $aArray[$key]=$value; } } } if ($rootTag == "xjxquery") { $sQuery = ""; $this->iPos++; while(!stristr($this->aObjArray[$this->iPos],"</xjxquery>")) { if (stristr($this->aObjArray[$this->iPos],"<q>") || stristr($this->aObjArray[$this->iPos],"</q>")) { $this->iPos++; continue; } $sQuery .= $this->aObjArray[$this->iPos]; $this->iPos++; } parse_str($sQuery, $aArray); // If magic quotes is on, then we need to strip the slashes from the // array values because of the parse_str pass which adds slashes if (get_magic_quotes_gpc() == 1) { $newArray = array(); foreach ($aArray as $sKey => $sValue) { if (is_string($sValue)) $newArray[$sKey] = stripslashes($sValue); else $newArray[$sKey] = $sValue; } $aArray = $newArray; } } return $aArray; }}// end class xajax// xajaxErrorHandler() is registered with PHP's set_error_handler() function if// the xajax error handling system is turned on// used by the xajax classfunction xajaxErrorHandler($errno, $errstr, $errfile, $errline){ $errorReporting = error_reporting(); if ($errorReporting == 0) return; if ($errno == E_NOTICE) { $errTypeStr = "NOTICE"; } else if ($errno == E_WARNING) { $errTypeStr = "WARNING"; } else if ($errno == E_USER_NOTICE) { $errTypeStr = "USER NOTICE"; } else if ($errno == E_USER_WARNING) { $errTypeStr = "USER WARNING"; } else if ($errno == E_USER_ERROR) { $errTypeStr = "USER FATAL ERROR"; } else if ($errno == E_STRICT) { return; } else { $errTypeStr = "UNKNOWN: $errno"; } $GLOBALS['xajaxErrorHandlerText'] .= "\n----\n[$errTypeStr] $errstr\nerror in line $errline of file $errfile";}?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -