core.php

来自「Bug tracker, and reporter.」· PHP 代码 · 共 475 行 · 第 1/2 页

PHP
475
字号
<?php/** * Zend Framework * * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@zend.com so we can send you a copy immediately. * * @category   Zend * @package    Zend_Cache * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com) * @license    http://framework.zend.com/license/new-bsd     New BSD License *//** * @package    Zend_Cache * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com) * @license    http://framework.zend.com/license/new-bsd     New BSD License */class Zend_Cache_Core{    /**     * Backend Object     *     * @var object $_backend     */    private $_backend = null;    /**     * Available options     *     * ====> (boolean) write_control :     * - Enable / disable write control (the cache is read just after writing to detect corrupt entries)     * - Enable write control will lightly slow the cache writing but not the cache reading     * Write control can detect some corrupt cache files but maybe it's not a perfect control     *     * ====> (boolean) caching :     * - Enable / disable caching     * (can be very useful for the debug of cached scripts)     *     * =====> (string) cache_id_prefix :     * - prefix for cache ids (namespace)     *      * ====> (boolean) automatic_serialization :     * - Enable / disable automatic serialization     * - It can be used to save directly datas which aren't strings (but it's slower)     *     * ====> (int) automatic_cleaning_factor :     * - Disable / Tune the automatic cleaning process     * - The automatic cleaning process destroy too old (for the given life time)     *   cache files when a new cache file is written :     *     0               => no automatic cache cleaning     *     1               => systematic cache cleaning     *     x (integer) > 1 => automatic cleaning randomly 1 times on x cache write     *     * ====> (int) lifetime :     * - Cache lifetime (in seconds)     * - If null, the cache is valid forever.     *     * ====> (boolean) logging :     * - If set to true, logging is activated (but the system is slower)     *      * ====> (boolean) ignore_user_abort     * - If set to true, the core will set the ignore_user_abort PHP flag inside the     *   save() method to avoid cache corruptions in some cases (default false)     *     * @var array $_options available options     */    protected $_options = array(        'write_control'             => true,        'caching'                   => true,        'cache_id_prefix'           => null,        'automatic_serialization'   => false,        'automatic_cleaning_factor' => 10,        'lifetime'                  => 3600,        'logging'                   => false,        'logger'                    => null,        'ignore_user_abort'		    => false    );    /**     * Array of options which have to be transfered to backend     *     * @var array $_directivesList     */    protected static $_directivesList = array('lifetime', 'logging', 'logger');    /**     * Not used for the core, just a sort a hint to get a common setOption() method (for the core and for frontends)     *     * @var array $_specificOptions     */    protected $_specificOptions = array();    /**     * Last used cache id     *     * @var string $_lastId     */    private $_lastId = null;    /**     * Constructor     *     * @param  array $options Associative array of options     * @throws Zend_Cache_Exception     * @return void     */    public function __construct($options = array())    {        if (!is_array($options)) {            Zend_Cache::throwException('Options parameter must be an array');        }        while (list($name, $value) = each($options)) {            $this->setOption($name, $value);        }        $this->_loggerSanity();    }    /**     * Set the backend     *     * @param  object $backendObject     * @throws Zend_Cache_Exception     * @return void     */    public function setBackend($backendObject)    {        if (!is_object($backendObject)) {            Zend_Cache::throwException('Incorrect backend object !');        }        $this->_backend= $backendObject;        // some options (listed in $_directivesList) have to be given        // to the backend too (even if they are not "backend specific")        $directives = array();        foreach (Zend_Cache_Core::$_directivesList as $directive) {            $directives[$directive] = $this->_options[$directive];        }        $this->_backend->setDirectives($directives);    }    /**     * Public frontend to set an option     *     * There is an additional validation (relatively to the protected _setOption method)     *     * @param  string $name  Name of the option     * @param  mixed  $value Value of the option     * @throws Zend_Cache_Exception     * @return void     */    public function setOption($name, $value)    {        if (is_string($name)) {            $name = strtolower($name);            if (array_key_exists($name, $this->_options)) {                // This is a Core option                $this->_setOption($name, $value);                return;            }            if (array_key_exists($name, $this->_specificOptions)) {                // This a specic option of this frontend                $this->_specificOptions[$name] = $value;                return;            }        }        Zend_Cache::throwException("Incorrect option name : $name");    }    /**     * Set an option     *     * @param  string $name  Name of the option     * @param  mixed  $value Value of the option     * @throws Zend_Cache_Exception     * @return void     */    private function _setOption($name, $value)    {        if (!is_string($name) || !array_key_exists($name, $this->_options)) {            Zend_Cache::throwException("Incorrect option name : $name");        }        $this->_options[$name] = $value;    }    /**     * Force a new lifetime     *     * The new value is set for the core/frontend but for the backend too (directive)     *     * @param  int $newLifetime New lifetime (in seconds)     * @return void     */    public function setLifetime($newLifetime)    {        $this->_options['lifetime'] = $newLifetime;        $this->_backend->setDirectives(array(            'lifetime' => $newLifetime        ));    }    /**     * Test if a cache is available for the given id and (if yes) return it (false else)     *     * @param  string  $id                     Cache id     * @param  boolean $doNotTestCacheValidity If set to true, the cache validity won't be tested     * @param  boolean $doNotUnserialize       Do not serialize (even if automatic_serialization is true) => for internal use     * @return mixed|false Cached datas     */    public function load($id, $doNotTestCacheValidity = false, $doNotUnserialize = false)    {        if (!$this->_options['caching']) {            return false;        }        $id = $this->_id($id); // cache id may need prefix        $this->_lastId = $id;        self::_validateIdOrTag($id);        $data = $this->_backend->load($id, $doNotTestCacheValidity);        if ($data===false) {            // no cache available            return false;        }        if ((!$doNotUnserialize) && $this->_options['automatic_serialization']) {            // we need to unserialize before sending the result            return unserialize($data);        }        return $data;    }    /**     * Test if a cache is available for the given id

⌨️ 快捷键说明

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