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

📄 server.class.php

📁 Ajax最流行书籍
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?php/** * NAJAX Server Namespace file. * * <p>This file defines the {@link NAJAX_Server} Class.</p> * <p>Example:</p> * <code> * <?php * * require_once('najax.php'); * * class Calculator * { * 	var $result; * * 	function Calculator() * 	{ * 		$this->result = 0; * 	} * * 	function Add($arg) * 	{ * 		$this->result += $arg; * 	} * } * * NAJAX_Server::runServer(); * * ?> * </code> * * @author	Stanimir Angeloff * * @package	NAJAX * * @version	0.4.1.0 * *//** * NAJAX Server Class. * * <p>This class is used to handle client callbacks.</p> * <p>Example:</p> * <code> * <?php * * require_once('najax.php'); * * class Calculator * { * 	var $result; * * 	function Calculator() * 	{ * 		$this->result = 0; * 	} * * 	function Add($arg) * 	{ * 		$this->result += $arg; * 	} * } * * NAJAX_Server::runServer(); * * ?> * </code> * * @author		Stanimir Angeloff * * @package		NAJAX * * @version		0.4.1.0 * */class NAJAX_Server extends NAJAX_Observable{	/**	 * Checks if the request is a client callback	 * to the server and handles it.	 *	 * @access	public	 *	 * @return	bool	true if the request is a valid client callback,	 *					false otherwise.	 *	 * @static	 *	 */	function runServer()	{		if ( ! NAJAX_Server::notifyObservers('runServerEnter')) {			return false;		}		if (NAJAX_Server::initializeCallback()) {			NAJAX_Server::dispatch();			/**			 * Defines whether the request is a client callback.			 */			define('NAJAX_CALLBACK', true);		}		if ( ! defined('NAJAX_CALLBACK')) {			/**			 * Defines whether the request is a client callback.			 */			define('NAJAX_CALLBACK', false);		}		if (NAJAX_Server::notifyObservers('runServerLeave', array('isCallback' => NAJAX_CALLBACK))) {			return NAJAX_CALLBACK;		} else {			return false;		}	}	/**	 * Checks if the request is a client callback to the	 * server and initializes callback parameters.	 *	 * @access	public	 *	 * @return	bool	true if the request is a valid client callback,	 *					false otherwise.	 *	 * @static	 *	 */	function initializeCallback()	{		if ( ! NAJAX_Server::notifyObservers('initializeCallbackEnter')) {			return false;		}		if (isset($_GET['najaxCall'])) {			if (strcasecmp($_GET['najaxCall'], 'true') == 0) {				if ( ! isset($GLOBALS['HTTP_RAW_POST_DATA'])) {					return false;				}				$requestBody = @unserialize($GLOBALS['HTTP_RAW_POST_DATA']);				if ($requestBody == null) {					return false;				}				if (				isset($requestBody['eventPost']) &&				isset($requestBody['className']) &&				isset($requestBody['sender']) &&				isset($requestBody['event']) &&				array_key_exists('data', $requestBody) &&				array_key_exists('filter', $requestBody)) {					if (					(NAJAX_Utilities::getType($requestBody['eventPost']) != 'bool') ||					(NAJAX_Utilities::getType($requestBody['className']) != 'string') ||					(NAJAX_Utilities::getType($requestBody['sender']) != 'string') ||					(NAJAX_Utilities::getType($requestBody['event']) != 'string')) {						return false;					}					if ( ! empty($requestBody['className'])) {						NAJAX_Server::loadClass($requestBody['className']);					} else {						return false;					}					if ( ! NAJAX_Server::isClassAllowed($requestBody['className'])) {						return false;					}					$requestBody['sender'] = @unserialize($requestBody['sender']);					if ($requestBody['sender'] === null) {						return false;					}					if (strcasecmp(get_class($requestBody['sender']), $requestBody['className']) != 0) {						return false;					}					if ( ! NAJAX_Server::notifyObservers('initializeCallbackSuccess', array('request' => &$requestBody))) {						return false;					}					$GLOBALS['_NAJAX_SERVER_REQUEST_BODY'] =& $requestBody;					if (NAJAX_Server::notifyObservers('initializeCallbackLeave', array('request' => &$requestBody))) {						return true;					}				} else if (				isset($requestBody['eventsCallback']) &&				isset($requestBody['time']) &&				isset($requestBody['data'])) {					if (					(NAJAX_Utilities::getType($requestBody['eventsCallback']) != 'bool') ||					(NAJAX_Utilities::getType($requestBody['time']) != 'float') ||					(NAJAX_Utilities::getType($requestBody['data']) != 's_array')) {						return false;					}					foreach ($requestBody['data'] as $eventData) {						if ( ! empty($eventData['className'])) {							NAJAX_Server::loadClass($eventData['className']);						} else {							return false;						}						if ( ! NAJAX_Server::isClassAllowed($eventData['className'])) {							return false;						}					}					if ( ! NAJAX_Server::notifyObservers('initializeCallbackSuccess', array('request' => &$requestBody))) {						return false;					}					$GLOBALS['_NAJAX_SERVER_REQUEST_BODY'] =& $requestBody;					if (NAJAX_Server::notifyObservers('initializeCallbackLeave', array('request' => &$requestBody))) {						return true;					}				} else {					if (					( ! isset($requestBody['source'])) ||					( ! isset($requestBody['className'])) ||					( ! isset($requestBody['method'])) ||					( ! isset($requestBody['arguments']))) {						return false;					}					if ( ! empty($requestBody['className'])) {						NAJAX_Server::loadClass($requestBody['className']);					}					$requestBody['source'] = @unserialize($requestBody['source']);					$requestBody['arguments'] = @unserialize($requestBody['arguments']);					if (					($requestBody['source'] === null) ||					($requestBody['className'] === null) ||					($requestBody['arguments'] === null)) {						return false;					}					if (					(NAJAX_Utilities::getType($requestBody['source']) != 'object') ||					(NAJAX_Utilities::getType($requestBody['className']) != 'string') ||					(NAJAX_Utilities::getType($requestBody['method']) != 'string') ||					(NAJAX_Utilities::getType($requestBody['arguments']) != 's_array')) {						return false;					}					if (strcasecmp($requestBody['className'], get_class($requestBody['source'])) != 0) {						return false;					}					if ( ! NAJAX_Server::isClassAllowed($requestBody['className'])) {						return false;					}					if (method_exists($requestBody['source'], NAJAX_CLIENT_METADATA_METHOD_NAME)) {						call_user_func_array(array(&$requestBody['source'], NAJAX_CLIENT_METADATA_METHOD_NAME), null);						if (isset($requestBody['source']->najaxMeta)) {							if (NAJAX_Utilities::getType($requestBody['source']->najaxMeta) == 'object') {								if (strcasecmp(get_class($requestBody['source']->najaxMeta), 'NAJAX_Meta') == 0) {									if ( ! $requestBody['source']->najaxMeta->isPublicMethod($requestBody['method'])) {										return false;									}								}							}						}					}					if ( ! NAJAX_Server::notifyObservers('initializeCallbackSuccess', array('request' => &$requestBody))) {						return false;					}					$GLOBALS['_NAJAX_SERVER_REQUEST_BODY'] =& $requestBody;					if (NAJAX_Server::notifyObservers('initializeCallbackLeave', array('request' => &$requestBody))) {						return true;					}				}			}		}		NAJAX_Server::notifyObservers('initializeCallbackLeave');		return false;	}	/**	 * Dispatches a client callback to the server.	 *	 * @access	public	 *	 * @return	string	Outputs JavaString code that contains the result	 *					and the output of the callback.	 *	 * @static	 *	 */	function dispatch()	{		if (empty($GLOBALS['_NAJAX_SERVER_REQUEST_BODY'])) {			return false;		}		$requestBody =& $GLOBALS['_NAJAX_SERVER_REQUEST_BODY'];		if ( ! NAJAX_Server::notifyObservers('dispatchEnter', array('request' => &$requestBody))) {			return false;		}		if (isset($requestBody['eventPost'])) {			$callbackResponse = array();			$storage = NAJAX_Events_Storage::getStorage();			$callbackResponse['status'] = $storage->postEvent($requestBody['event'], $requestBody['className'], $requestBody['sender'], $requestBody['data'], $requestBody['filter']);			if (NAJAX_Server::notifyObservers('dispatchLeave', array('request' => &$requestBody, 'response' => &$callbackResponse))) {				if ( ! empty($callbackResponse['status'])) {					print NAJAX_Client::register($callbackResponse);				}			}		} else if (isset($requestBody['eventsCallback'])) {			$eventsQuery = array();			foreach ($requestBody['data'] as $event) {				$eventsQuery[] = array(				'event'		=>	$event['event'],				'className'	=>	$event['className'],				'filter'	=>	$event['filter'],				'time'		=>	$requestBody['time']				);			}			$callbackResponse = array();			$storage = NAJAX_Events_Storage::getStorage();			$storage->cleanEvents();			$callbackResponse['result'] = $storage->filterMultipleEvents($eventsQuery);			if (NAJAX_Server::notifyObservers('dispatchLeave', array('request' => &$requestBody, 'response' => &$callbackResponse))) {				if ( ! empty($callbackResponse['result'])) {					print NAJAX_Client::register($callbackResponse);				}			}		} else {			$callbackResponse = array();			$outputBuffering = @ob_start();			set_error_handler(array('NAJAX_Server', 'handleError'));			$callbackResponse['returnValue'] = call_user_func_array(array(&$requestBody['source'], $requestBody['method']), $requestBody['arguments']);			if (defined('NAJAX_SERVER_EXCEPTION')) {

⌨️ 快捷键说明

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