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

📄 cache.php.svn-base

📁 PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。
💻 SVN-BASE
字号:
<?php/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: *//** * HTTP::Header::Cache *  * PHP versions 4 and 5 * * @category    HTTP * @package     HTTP_Header * @author      Wolfram Kriesing <wk@visionp.de> * @author      Michael Wallner <mike@php.net> * @copyright   2003-2005 The Authors * @license     BSD, revised * @version     CVS: $Id$ * @link        http://pear.php.net/package/HTTP_Header *//** * Requires HTTP_Header */require_once 'HTTP/Header.php';/** * HTTP_Header_Cache *  * This package provides methods to easier handle caching of HTTP pages.  That  * means that the pages can be cached at the client (user agent or browser) and  * your application only needs to send "hey client you already have the pages". *  * Which is done by sending the HTTP-Status "304 Not Modified", so that your * application load and the network traffic can be reduced, since you only need * to send the complete page once.  This is really an advantage e.g. for  * generated style sheets, or simply pages that do only change rarely. *  * Usage: * <code> *  require_once 'HTTP/Header/Cache.php'; *  $httpCache = new HTTP_Header_Cache(4, 'weeks'); *  $httpCache->sendHeaders(); *  // your code goes here * </code> *  * @package     HTTP_Header * @category    HTTP * @access      public * @version     $Revision$ */class HTTP_Header_Cache extends HTTP_Header{    /**     * Constructor     *      * Set the amount of time to cache.     *      * @access  public     * @return  object  HTTP_Header_Cache     * @param   int     $expires      * @param   string  $unit     */    function HTTP_Header_Cache($expires = 0, $unit = 'seconds')    {        parent::HTTP_Header();        $this->setHeader('Pragma', 'cache');        $this->setHeader('Last-Modified', $this->getCacheStart());        $this->setHeader('Cache-Control', 'private, must-revalidate, max-age=0');                if ($expires) {            if (!$this->isOlderThan($expires, $unit)) {                $this->exitCached();            }            $this->setHeader('Last-Modified', time());        }    }    /**     * Get Cache Start     *      * Returns the unix timestamp of the If-Modified-Since HTTP header or the     * current time if the header was not sent by the client.     *      * @access  public     * @return  int     unix timestamp     */    function getCacheStart()    {        if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && !$this->isPost()) {            return strtotime(current($array = explode(';',                 $_SERVER['HTTP_IF_MODIFIED_SINCE'])));        }        return time();    }    /**     * Is Older Than     *      * You can call it like this:     * <code>     *  $httpCache->isOlderThan(1, 'day');     *  $httpCache->isOlderThan(47, 'days');     *      *  $httpCache->isOlderThan(1, 'week');     *  $httpCache->isOlderThan(3, 'weeks');     *      *  $httpCache->isOlderThan(1, 'hour');     *  $httpCache->isOlderThan(5, 'hours');     *      *  $httpCache->isOlderThan(1, 'minute');     *  $httpCache->isOlderThan(15, 'minutes');     *      *  $httpCache->isOlderThan(1, 'second');     *  $httpCache->isOlderThan(15);     * </code>     *      * If you specify something greater than "weeks" as time untit, it just      * works approximatly, because a month is taken to consist of 4.3 weeks.     *      * @access  public     * @return  bool    Returns true if requested page is older than specified.     * @param   int     $time The amount of time.     * @param   string  $unit The unit of the time amount - (year[s], month[s],      *                  week[s], day[s], hour[s], minute[s], second[s]).     */    function isOlderThan($time = 0, $unit = 'seconds')    {        if (!isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) || $this->isPost()) {            return true;        }        if (!$time) {            return false;        }                switch (strtolower($unit))        {            case 'year':            case 'years':                $time *= 12;            case 'month':            case 'months':                $time *= 4.3;            case 'week':            case 'weeks':                $time *= 7;            case 'day':            case 'days':                $time *= 24;            case 'hour':            case 'hours':                $time *= 60;            case 'minute':            case 'minutes':                $time *= 60;        }                return (time() - $this->getCacheStart()) > $time;    }    /**     * Is Cached     *      * Check whether we can consider to be cached on the client side.     *      * @access  public     * @return  bool    Whether the page/resource is considered to be cached.     * @param   int     $lastModified Unix timestamp of last modification.     */    function isCached($lastModified = 0)    {        if ($this->isPost()) {            return false;        }        if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && !$lastModified) {            return true;        }        if (!$seconds = time() - $lastModified) {            return false;        }        return !$this->isOlderThan($seconds);    }        /**     * Is Post     *      * Check if request method is "POST".     *      * @access  public     * @return  bool     */    function isPost()    {        return  isset($_SERVER['REQUEST_METHOD']) and            'POST' == $_SERVER['REQUEST_METHOD'];    }        /**     * Exit If Cached     *      * Exit with "HTTP 304 Not Modified" if we consider to be cached.     *      * @access  public     * @return  void     * @param   int     $lastModified Unix timestamp of last modification.     */    function exitIfCached($lastModified = 0)    {        if ($this->isCached($lastModified)) {            $this->exitCached();        }    }        /**     * Exit Cached     *      * Exit with "HTTP 304 Not Modified".     *      * @access  public     * @return  void     */    function exitCached()    {        $this->sendHeaders();        $this->sendStatusCode(304);        exit;    }        /**     * Set Last Modified     *      * @access  public     * @return  void     * @param   int     $lastModified The unix timestamp of last modification.     */    function setLastModified($lastModified = null)    {        $this->setHeader('Last-Modified', $lastModified);    }}?>

⌨️ 快捷键说明

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