会员登录 | 会员注册 | 意见建议 | 网站地图

站长资源综合门户

当前位置:首页 > 站长学院 > 编程程序 > PHP缓存技术实现

PHP缓存技术实现

时间:2012-04-01 18:49:22   作者:   来源:   点击:

$this->_setCacheDir(DATA_DIR . '/cache');

}

}

/**

* 获取缓存文件

*

* @param string $key

* @return string

*/

protected function _getCacheFile($key) {

$subdir = $this->useSubdir ? substr($key, 0, 2) . '/' : '';

return $this->_cachesDir . '/' . $subdir . $key . '.php';

}

/**

* 读取缓存变量

* 为防止信息泄露,缓存文件格式为php文件,并以""开头

*

* @param string $key 缓存下标

* @return mixed

*/

public function fetch($key) {

$cacheFile = self::_getCacheFile($key);

if (file_exists($cacheFile) && is_readable($cacheFile)) {

// include 方式

//return include $cacheFile;

// 系列化方式

return unserialize(@file_get_contents($cacheFile, false, NULL, 13));

}

return false;

}

/**

* 缓存变量

* 为防止信息泄露,缓存文件格式为php文件,并以""开头

*

* @param string $key 缓存变量下标

* @param string $value 缓存变量的值

* @return bool

*/

public function store($key, $value) {

$cacheFile = self::_getCacheFile($key);

$cacheDir = dirname($cacheFile);

if(!is_dir($cacheDir)) {

if(!@mkdir($cacheDir, 0755, true)) {

throw new CacheException("Could not make cache directory");

}

}

// 用include方式

//return @file_put_contents($cacheFile, '

return @file_put_contents($cacheFile, '' . serialize($value));

}

/**

* 删除缓存变量

*

* @param string $key 缓存下标

* @return Cache_File

*/

public function delete($key) {

if(emptyempty($key)) {

throw new CacheException("Missing argument 1 for Cache_File::delete()");

}

$cacheFile = self::_getCacheFile($key);

if(!@unlink($cacheFile)) {

throw new CacheException("Cache file could not be deleted");

}

return $this;

}

/**

* 缓存单元是否已经锁定

*

* @param string $key

* @return bool

*/

public function isLocked($key) {

$cacheFile = self::_getCacheFile($key);

clearstatcache();

return file_exists($cacheFile . '.lock');

}

/**

* 锁定

*

* @param string $key

* @return Cache_File

*/

public function lock($key) {

$cacheFile = self::_getCacheFile($key);

$cacheDir = dirname($cacheFile);

if(!is_dir($cacheDir)) {

if(!@mkdir($cacheDir, 0755, true)) {

if(!is_dir($cacheDir)) {

throw new CacheException("Could not make cache directory");

}

}

}

// 设定缓存锁文件的访问和修改时间

@touch($cacheFile . '.lock');

return $this;

}

/**

* 解锁

*

* @param string $key

* @return Cache_File

*/

public function unlock($key) {

$cacheFile = self::_getCacheFile($key);

@unlink($cacheFile . '.lock');

return

分享到:

网友评论

热门编程程序