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

📄 server.php

📁 很棒的在线教学系统
💻 PHP
📖 第 1 页 / 共 2 页
字号:
        if ($classList != false && count($classList) > 0) {            // were setup enough to make a stubETag if the input it wants is a class list            if ($this->cacheOptions['httpCacheStub'] &&                 $this->cacheOptions['StubCacheExpects'] == 'classes')             {                $stubETag = $this->_callCacheRule('Stub',$classList);            }            // if were not in combined output compare etags, if method returns true were done            if (!$combinedOutput && isset($stubETag)) {                if ($this->_compareEtags($stubETag)) {                    ob_end_clean();                    return;                }            }            // output the stubs for all the classes in our list            foreach($classList as $class) {                    echo $this->ajax->generateClassStub($class);            }            // if were cacheing and the rule expects content make a tag and check it, if the check is true were done            if ($this->cacheOptions['httpCacheStub'] &&                 $this->cacheOptions['StubCacheExpects'] == 'content')             {                $stubETag = $this->_callCacheRule('Stub',ob_get_contents());            }            // if were not in combined output compare etags, if method returns true were done            if (!$combinedOutput && isset($stubETag)) {                if ($this->_compareEtags($stubETag)) {                    ob_end_clean();                    return;                }            }        }        if (count($fileList) > 0) {            // if were caching and need a file list build our jsETag            if ($this->cacheOptions['httpCacheClient'] &&                 $this->cacheOptions['ClientCacheExpects'] === 'files')             {                $jsETag = $this->_callCacheRule('Client',$fileList);            }            // if were not in combined output compare etags, if method returns true were done            if (!$combinedOutput && isset($jsETag)) {                if ($this->_compareEtags($jsETag)) {                    ob_end_clean();                    return;                }            }            // output the needed client js files            foreach($fileList as $file) {                $this->_readFile($file);            }            // if were caching and need content build the etag            if ($this->cacheOptions['httpCacheClient'] &&                 $this->cacheOptions['ClientCacheExpects'] === 'content')             {                $jsETag = $this->_callCacheRule('Client',ob_get_contents());            }            // if were not in combined output compare etags, if method returns true were done            if (!$combinedOutput && isset($jsETag)) {                if ($this->_compareEtags($jsETag)) {                    ob_end_clean();                    return;                }            }            // were in combined output, merge the 2 ETags and compare            else if (isset($jsETag) && isset($stubETag)) {                if ($this->_compareEtags(md5($stubETag.$jsETag))) {                    ob_end_clean();                    return;                }            }        }        // were outputting content, add our length header and send the output        $length = ob_get_length();        $output = ob_get_contents();        ob_end_clean();        if ($this->ajax->packJavaScript) {            $output = $this->ajax->packJavaScript($output);            $length = strlen($output);        }        if ($this->compression['enabled'] && $this->compression['type'] == 'gzip' && strpos($_SERVER["HTTP_ACCEPT_ENCODING"], "gzip") !== false) {            $output = gzencode($output,9);            $length = strlen($output);            $headers['Content-Encoding'] = 'gzip';        }        if ($length > 0 && $this->ajax->_sendContentLength()) {             $headers['Content-Length'] = $length;        }        $headers['Content-Type'] = 'text/javascript; charset=utf-8';        $this->ajax->_sendHeaders($headers);        echo($output);    }    /**     * Run readfile on input with basic error checking     *     * @param   string  $file   file to read     * @access  private     * @todo    is addslashes enough encoding for js?     */    function _readFile($file)     {        if (file_exists($file)) {            readfile($file);        } else {            $file = addslashes($file);            echo "alert('Unable to find javascript file: $file');";        }    }    /**     * Get the location of the client js     * To override the default pear datadir location set $this->clientJsLocation     *     * @return  string     */    function clientJsLocation()     {        if (!$this->clientJsLocation) {            $path = '@data-dir@'.DIRECTORY_SEPARATOR.'HTML_AJAX'.DIRECTORY_SEPARATOR.'js'.DIRECTORY_SEPARATOR;            if(strpos($path, '@'.'data-dir@') === 0)            {                $path = realpath(dirname(__FILE__).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'js').DIRECTORY_SEPARATOR;            }            return $path;        } else {            return $this->clientJsLocation;        }    }    /**     * Set the location of the client js     *     * @access  public     * @param   string  $location   Location     * @return  void     */    function setClientJsLocation($location)     {        $this->clientJsLocation = $location;    }    /**     * Set the path to a Javascript libraries     *     * @access  public     * @param   string  $library    Library name     * @param   string  $path       Path     * @return  void     */    function setJavascriptLibraryPath($library, $path)     {        $this->javascriptLibraryPaths[$library] = $path;    }    /**     * Set the path to more than one Javascript libraries at once     *     * @access  public     * @param   array   $paths  Paths     * @return  void     */    function setJavascriptLibraryPaths($paths)     {        if (is_array($paths)) {            $this->javascriptLibraryPaths = array_merge($this->javascriptLibraryPaths, $paths);        }    }    /**     * Load options from _GET     *     * @access private     */    function _loadOptions()     {        $this->options = array('client'=>array(),'stub'=>array());        if (isset($_GET['client'])) {            $clients = explode(',',$this->ajax->_getVar('client'));            $client = array();            foreach($clients as $val) {                $cleanVal = $this->_cleanIdentifier($val);                if (!empty($cleanVal)) {                    $client[] = strtolower($cleanVal);                }            }            if (count($client) > 0) {                $this->options['client'] = $client;            }        }        if (isset($_GET['stub'])) {            $stubs = explode(',',$this->ajax->_getVar('stub'));            $stub = array();            foreach($stubs as $val) {                $cleanVal = $this->_cleanIdentifier($val);                if (!empty($cleanVal)) {                    $stub[] = strtolower($cleanVal);                }            }            if (count($stub) > 0) {                $this->options['stub'] = $stub;            }        }    }    /**     * Clean an identifier like a class name making it safe to use     *     * @param   string  $input     * @return  string     * @access  private     */    function _cleanIdentifier($input) {            return trim(preg_replace('/[^A-Za-z_0-9]/','',$input));    }    /**     * Run every init method on the class     *     * @access private     */    function _initAll()     {        if ($this->initMethods) {            foreach($this->_initLookup as $class => $method) {                $this->_init($class);            }        }    }    /**     * Init one class     *     * @param   string  $className     * @access private     */    function _init($className)     {        $className = strtolower($className);        if ($this->initMethods) {            if (isset($this->_initLookup[$className])) {                $method =& $this->_initLookup[$className];                if (is_array($method)) {                    call_user_func($method);                }                else {                    $this->$method();                }            } else {                trigger_error("Could find an init method for class: " . $className);            }        }    }    /**     * Generate a hash from a list of files     *     * @param   array   $files  file list     * @return  string  a hash that can be used as an etag     * @access  private     */    function _cacheRuleFile($files) {        $signature = "";        foreach($files as $file) {            if (file_exists($file)) {                $signature .= $file.filemtime($file);            }        }        return md5($signature);    }    /**     * Generate a hash from the api of registered classes     *     * @param   array   $classes class list     * @return  string  a hash that can be used as an etag     * @access  private     */    function _cacheRuleApi($classes) {        $signature = "";        foreach($classes as $class) {            if (isset($this->ajax->_exportedInstances[$class])) {                $signature .= $class.implode(',',$this->ajax->_exportedInstances[$class]['exportedMethods']);            }        }        return md5($signature);    }    /**     * Generate a hash from the raw content     *     * @param   array   $content     * @return  string  a hash that can be used as an etag     * @access  private     */    function _cacheRuleContent($content) {        return md5($content);    }    /**     * Send cache control headers     * @access  private     */    function _sendCacheHeaders($etag,$notModified) {        header('Cache-Control: must-revalidate');        header('ETag: '.$etag);        if ($notModified) {            header('HTTP/1.0 304 Not Modified',false,304);        }    }    /**     * Compare eTags     *     * @param   string  $serverETag server eTag     * @return  boolean     * @access  private     */    function _compareEtags($serverETag) {        if (isset($_SERVER['HTTP_IF_NONE_MATCH'])) {    		if (strcmp($this->ajax->_getServer('HTTP_IF_NONE_MATCH'),$serverETag) == 0) {                $this->_sendCacheHeaders($serverETag,true);                return true;            }    	}        $this->_sendCacheHeaders($serverETag,false);        return false;    }    /**     * Call a cache rule and return its retusn     *     * @param   string  $rule Stub|Client     * @param   mixed   $payload     * @return  boolean     * @access  private     * @todo    decide if error checking is needed     */    function _callCacheRule($rule,$payload) {        $method = '_cacheRule'.$this->cacheOptions[$rule.'CacheRule'];        return call_user_func(array(&$this,$method),$payload);    }}/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */?>

⌨️ 快捷键说明

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