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 + -
显示快捷键?