您的位置:首页 > 编程语言 > PHP开发

生成zend cache ID 用于清除指定的zend cache page.

2008-07-02 11:43 267 查看
/*
*
使用方法,清除对'/zhidao/?page=1&id=2'的缓存。
Zend_Loader::loadClass('Custom_Cacheid');
$cacheId=Custom_Cacheid::makeId('/zhidao/?page=1&id=2',Config::$cacheOptions);
$GLOBALS['cache']->remove($cacheId);
*/
class Custom_Cacheid
{
static $Get=NULL;
static $Post=NULL;
static $Session=NULL;
static $Cookie=NULL;
/**
* 根据提供的url,及缓存选项(本系统中是Config::$cacheOptions)返回缓存的id
* 通过设置$param来改变$_GET,$_POST,$_COOKIE,$_SESSION值,
例如:
$param = array(
'Post'=>array('id'=>1,'page'=>1)
);
表示设定$_POST参数为array('id'=>1,'page'=>1)。
注意:get参数是自动根据url获取的
注意:$url 中 ? 后的get参数不能错误比如 ?a==&page=1;str2arr只是一个简单的函数,它可能与php分析方法不同,导致不能取得正确的id
*/
static public function makeId($url, $activeOptions, $param=array())
{
foreach($param as $key=>$value){
self::$$key = $value;
}
if(strpos($url,'?')!==false){
self::$Get = self::str2arr(substr($url,strpos($url,'?')));
}
$tmp = $url;
foreach (array('Get', 'Post', 'Session', 'Files', 'Cookie') as $arrayName) {

$tmp2 = self::_makePartialId(
$arrayName,
isset($activeOptions['cache_with_' . strtolower($arrayName) . '_variables'])?$activeOptions['cache_with_' . strtolower($arrayName) . '_variables']:false,
isset($activeOptions['make_id_with_' . strtolower($arrayName) . '_variables'])?$activeOptions['make_id_with_' . strtolower($arrayName) . '_variables']:true
);
if ($tmp2===false) {
return false;
}
$tmp = $tmp . $tmp2;
}
return md5($tmp);
}

/**
* Make a partial id depending on options
*
* @param string $arrayName Superglobal array name
* @param bool $bool1 If true, cache is still on even if there are some variables in the superglobal array
* @param bool $bool2 If true, we have to use the content of the superglobal array to make a partial id
* @return mixed|false Partial id (string) or false if the cache should have not to be used
*/
private static function _makePartialId($arrayName, $bool1, $bool2)
{
switch ($arrayName) {
case 'Get':
$var = !empty(self::$Get)?self::$Get:$_GET;
break;
case 'Post':
$var = !empty(self::$Post)?self::$Post:$_POST;
break;
case 'Session':
if(!empty(self::$Session)){
$var = self::$Session;
}else{
if (isset($_SESSION)) {
$var = $_SESSION;
} else {
$var = null;
}
}
break;
case 'Cookie':
if(!empty(self::$Cookie)){
$var = self::$Cookie;
}else{
if (isset($_COOKIE)) {
$var = $_COOKIE;
} else {
$var = null;
}
}
break;
case 'Files':
$var = $_FILES;
break;
default:
return false;
}
if ($bool1) {
if ($bool2) {
return serialize($var);
}
return '';
}
if (count($var) > 0) {
echo $arrayName.'<hr>';
return false;
}
return '';
}
/*
* 把字符串转换成数组
例如传入 ?page=1&id=1 将返回array('page'=>1,'id'=>1)
*/
static function str2arr($str){
$str=preg_replace("/^/?/","",$str);
$tmp=split("&",$str);
$return=array();
foreach($tmp as $t){
$string = split("=",$t);
if(count($string)==2){
$return[$string[0]] = $string[1];
}
}
return $return;
}
}

Config::$cacheOptions

static $cacheOptions = array(
'cache' => true,
'cache_with_get_variables' => true, //当有get变量时也进行缓存
'cache_with_post_variables' => false, //当有post变量时不进行缓存
'cache_with_cookie_variables' => true, //当有cookie变量时也进行缓存
'cache_with_session_variables' => true, //当有session变量时也进行缓存
'make_id_with_cookie_variables' => false,
'make_id_with_session_variables' => false,
'make_id_with_post_variables' => false,
'make_id_with_files_variables' => false,
'make_id_with_get_variables' => true
);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: