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

📄 lite.php

📁 一个用PHP编写的
💻 PHP
📖 第 1 页 / 共 2 页
字号:
    * @return boolean true if no problem    * @access public    */    function remove($id, $group = 'default')    {        $this->_setFileName($id, $group);        if ($this->_memoryCaching) {            if (isset($this->_memoryCachingArray[$this->_file])) {                unset($this->_memoryCachingArray[$this->_file]);                $this->_memoryCachingCounter = $this->_memoryCachingCounter - 1;            }            if ($this->_onlyMemoryCaching) {                return true;            }        }        return $this->_unlink($this->_file);    }    /**    * Clean the cache    *    * if no group is specified all cache files will be destroyed    * else only cache files of the specified group will be destroyed    *    * @param string $group name of the cache group    * @param string $mode flush cache mode : 'old', 'ingroup', 'notingroup',     *                                        'callback_myFunction'    * @return boolean true if no problem    * @access public    */    function clean($group = false, $mode = 'ingroup')    {        return $this->_cleanDir($this->_cacheDir, $group, $mode);    }           /**    * Set to debug mode    *    * When an error is found, the script will stop and the message will be displayed    * (in debug mode only).     *    * @access public    */    function setToDebug()    {        $this->setOption('pearErrorMode', CACHE_LITE_ERROR_DIE);    }    /**    * Set a new life time    *    * @param int $newLifeTime new life time (in seconds)    * @access public    */    function setLifeTime($newLifeTime)    {        $this->_lifeTime = $newLifeTime;        $this->_setRefreshTime();    }    /**    * Save the state of the caching memory array into a cache file cache    *    * @param string $id cache id    * @param string $group name of the cache group    * @access public    */    function saveMemoryCachingState($id, $group = 'default')    {        if ($this->_caching) {            $array = array(                'counter' => $this->_memoryCachingCounter,                'array' => $this->_memoryCachingState            );            $data = serialize($array);            $this->save($data, $id, $group);        }    }    /**    * Load the state of the caching memory array from a given cache file cache    *    * @param string $id cache id    * @param string $group name of the cache group    * @param boolean $doNotTestCacheValidity if set to true, the cache validity won't be tested    * @access public    */    function getMemoryCachingState($id, $group = 'default', $doNotTestCacheValidity = false)    {        if ($this->_caching) {            if ($data = $this->get($id, $group, $doNotTestCacheValidity)) {                $array = unserialize($data);                $this->_memoryCachingCounter = $array['counter'];                $this->_memoryCachingArray = $array['array'];            }        }    }        /**    * Return the cache last modification time    *    * BE CAREFUL : THIS METHOD IS FOR HACKING ONLY !    *    * @return int last modification time    */    function lastModified()     {        return @filemtime($this->_file);    }        /**    * Trigger a PEAR error    *    * To improve performances, the PEAR.php file is included dynamically.    * The file is so included only when an error is triggered. So, in most    * cases, the file isn't included and perfs are much better.    *    * @param string $msg error message    * @param int $code error code    * @access public    */    function raiseError($msg, $code)    {		lt_include( PLOG_CLASS_PATH."class/logger/loggermanager.class.php" );			$log =& LoggerManager::getLogger();        $log->error($msg, LOGGER_PRIO_ERROR);    }        /**     * Extend the life of a valid cache file     *      * see http://pear.php.net/bugs/bug.php?id=6681     *      * @access public     */    function extendLife()    {        @touch($this->_file);    }        // --- Private methods ---        /**    * Compute & set the refresh time    *    * @access private    */    function _setRefreshTime()     {        if (is_null($this->_lifeTime)) {            $this->_refreshTime = null;        } else {            $this->_refreshTime = time() - $this->_lifeTime;        }    }        /**    * Remove a file    *     * @param string $file complete file path and name    * @return boolean true if no problem    * @access private    */    function _unlink($file)    {        if (file_exists($file) && !@unlink($file)) {            return $this->raiseError('Cache_Lite : Unable to remove cache !', -3);        }        return true;            }    /**    * Recursive function for cleaning cache file in the given directory    *    * @param string $dir directory complete path (with a trailing slash)    * @param string $group name of the cache group    * @param string $mode flush cache mode : 'old', 'ingroup', 'notingroup',                                             'callback_myFunction'    * @return boolean true if no problem    * @access private    */    function _cleanDir($dir, $group = false, $mode = 'ingroup')         {        if ($this->_fileNameProtection) {            $motif = ($group) ? 'cache_'.md5($group).'_' : 'cache_';        } else {            $motif = ($group) ? 'cache_'.$group.'_' : 'cache_';        }        if ($this->_memoryCaching) {            while (list($key, ) = each($this->_memoryCachingArray)) {                if (strpos($key, $motif, 0)) {                    unset($this->_memoryCachingArray[$key]);                    $this->_memoryCachingCounter = $this->_memoryCachingCounter - 1;                }            }            if ($this->_onlyMemoryCaching) {                return true;            }        }        if (!($dh = opendir($dir))) {            return $this->raiseError('Cache_Lite : Unable to open cache directory !', -4);        }        $result = true;        while ($file = readdir($dh)) {            if (($file != '.') && ($file != '..')) {                if (substr($file, 0, 6)=='cache_') {                    $file2 = $dir . $file;                    if (is_file($file2)) {                        switch (substr($mode, 0, 9)) {                            case 'old':                                // files older than lifeTime get deleted from cache                                if (!is_null($this->_lifeTime)) {                                    if ((mktime() - @filemtime($file2)) > $this->_lifeTime) {                                        $result = ($result and ($this->_unlink($file2)));                                    }                                }                                break;                            case 'notingroup':                                if (!strpos($file2, $motif, 0)) {                                    $result = ($result and ($this->_unlink($file2)));                                }                                break;                            case 'callback_':                                $func = substr($mode, 9, strlen($mode) - 9);                                if ($func($file2, $group)) {                                    $result = ($result and ($this->_unlink($file2)));                                }                                break;                            case 'ingroup':                            default:                                if (strpos($file2, $motif, 0)) {                                    $result = ($result and ($this->_unlink($file2)));                                }                                break;                        }                    }                    if ((is_dir($file2)) and ($this->_hashedDirectoryLevel>0)) {                        $result = ($result and ($this->_cleanDir($file2 . '/', $group, $mode)));                    }                }            }        }        return $result;    }          /**    * Add some date in the memory caching array    *    * @param string $data data to cache    * @access private    */    function _memoryCacheAdd($data)    {        $this->_memoryCachingArray[$this->_file] = $data;        if ($this->_memoryCachingCounter >= $this->_memoryCachingLimit) {            list($key, ) = each($this->_memoryCachingArray);            unset($this->_memoryCachingArray[$key]);        } else {            $this->_memoryCachingCounter = $this->_memoryCachingCounter + 1;        }    }    /**    * Make a file name (with path)    *    * @param string $id cache id    * @param string $group name of the group    * @access private    */    function _setFileName($id, $group)    {                if ($this->_fileNameProtection) {            $suffix = 'cache_'.md5($group).'_'.md5($id);        } else {            $suffix = 'cache_'.$group.'_'.$id;        }        $root = $this->_cacheDir;        if ($this->_hashedDirectoryLevel>0) {            $hash = md5($suffix);            for ($i=0 ; $i<$this->_hashedDirectoryLevel ; $i++) {                $root = $root . 'cache_' . substr($hash, 0, $i + 1) . '/';            }           }        $this->_fileName = $suffix;        $this->_file = $root.$suffix;    }        /**    * Read the cache file and return the content    *    * @return string content of the cache file (else : false or a PEAR_Error object)    * @access private    */    function _read()    {        $fp = @fopen($this->_file, "rb");        if ($this->_fileLocking) @flock($fp, LOCK_SH);        if ($fp) {            clearstatcache();            $length = @filesize($this->_file);            $mqr = get_magic_quotes_runtime();            set_magic_quotes_runtime(0);            if ($this->_readControl) {                $hashControl = @fread($fp, 32);                $length = $length - 32;            }             if ($length) {                $data = @fread($fp, $length);            } else {                $data = '';            }            set_magic_quotes_runtime($mqr);            if ($this->_fileLocking) @flock($fp, LOCK_UN);            @fclose($fp);            if ($this->_readControl) {                $hashData = $this->_hash($data, $this->_readControlType);                if ($hashData != $hashControl) {                    if (!(is_null($this->_lifeTime))) {                        @touch($this->_file, time() - 2*abs($this->_lifeTime));                     } else {                        @unlink($this->_file);                    }                    return false;                }            }            return $data;        }        return $this->raiseError('Cache_Lite : Unable to read cache !', -2);     }        /**    * Write the given data in the cache file    *    * @param string $data data to put in cache    * @return boolean true if ok (a PEAR_Error object else)    * @access private    */    function _write($data)    {        if (!is_dir(dirname($this->_file)) && $this->_hashedDirectoryLevel > 0) {            $hash = md5($this->_fileName);            $root = $this->_cacheDir;            for ($i=0 ; $i<$this->_hashedDirectoryLevel ; $i++) {                $root = $root . 'cache_' . substr($hash, 0, $i + 1) . '/';                if (!(@is_dir($root))) {                    @mkdir($root, $this->_hashedDirectoryUmask);                }            }        }        $fp = @fopen($this->_file, "wb");        if ($fp) {            if ($this->_fileLocking) @flock($fp, LOCK_EX);            if ($this->_readControl) {                @fwrite($fp, $this->_hash($data, $this->_readControlType), 32);            }            $len = strlen($data);            @fwrite($fp, $data, $len);            if ($this->_fileLocking) @flock($fp, LOCK_UN);            @fclose($fp);            return true;        }              return $this->raiseError('Cache_Lite : Unable to write cache file : '.$this->_file, -1);    }           /**    * Write the given data in the cache file and control it just after to avoir corrupted cache entries    *    * @param string $data data to put in cache    * @return boolean true if the test is ok (else : false or a PEAR_Error object)    * @access private    */    function _writeAndControl($data)    {        $result = $this->_write($data);        if (is_object($result)) {            return $result; #聽We return the PEAR_Error object        }        $dataRead = $this->_read();        if (is_object($dataRead)) {            return $result; #聽We return the PEAR_Error object        }        if ((is_bool($dataRead)) && (!$dataRead)) {            return false;         }        return ($dataRead==$data);    }        /**    * Make a control key with the string containing datas    *    * @param string $data data    * @param string $controlType type of control 'md5', 'crc32' or 'strlen'    * @return string control key    * @access private    */    function _hash($data, $controlType)    {        switch ($controlType) {        case 'md5':            return md5($data);        case 'crc32':            return sprintf('% 32d', crc32($data));        case 'strlen':            return sprintf('% 32d', strlen($data));        default:            return $this->raiseError('Unknown controlType ! (available values are only \'md5\', \'crc32\', \'strlen\')', -5);        }    }    } ?>

⌨️ 快捷键说明

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