包 | system.base |
---|---|
继承 | class CStatePersister » CApplicationComponent » CComponent |
实现 | IApplicationComponent, IStatePersister |
源自 | 1.0 |
版本 | $Id: CStatePersister.php 3515 2011-12-28 12:29:24Z mdomba $ |
源码 |
CStatePersister实现一个基于文件的持久数据存储。
它可以用来保持多个请求或会话的数据。
默认, CStatePersister存储数据在一个名字叫‘state.bin’文件中它位于应用程序指定的 runtime 路径下。 你可以通过设置stateFile属性来改变它的位置。
从CStatePersister调用数据使用load()。保存数据使用 save().
持久数据,会话和缓存之间的比较如下:
因为服务器的资源通常有限, 如果你计划使用CStatePersister存储大量的数据。 你应该考虑使用吞吐性高的 基于数据的持久存储。
CStatePersister是一个核心的应用组件,用于存储全局的应用程序状态。 你也可以通过访问CApplication::getStatePersister() 了解基于缓存的页面持久存储。
它可以用来保持多个请求或会话的数据。
默认, CStatePersister存储数据在一个名字叫‘state.bin’文件中它位于应用程序指定的 runtime 路径下。 你可以通过设置stateFile属性来改变它的位置。
从CStatePersister调用数据使用load()。保存数据使用 save().
持久数据,会话和缓存之间的比较如下:
- session:单个用户的会话持久数据.
- state persister:所有请求的/会话的持久数据(例如,点击统计)。
- cache:不稳定并快速的储诸。它可的使用介于会话和持久数据之间。
因为服务器的资源通常有限, 如果你计划使用CStatePersister存储大量的数据。 你应该考虑使用吞吐性高的 基于数据的持久存储。
CStatePersister是一个核心的应用组件,用于存储全局的应用程序状态。 你也可以通过访问CApplication::getStatePersister() 了解基于缓存的页面持久存储。
公共属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
behaviors | array | 这个应用组件附加的行为。 这此行为将在应用组件调用init时附加在应用组件上。 请参照CModel::behaviors如何指定此属性值。 | CApplicationComponent |
cacheID | string | 这个ID指定的是缓存应用组件,用于缓存应用程序状态数据。 默认是‘cache’指的是主缓存应用组件。 设置这个属性为false,将禁止缓存应用程序状态数据。 | CStatePersister |
isInitialized | boolean | 检查应用组件是否已经初始化。 | CApplicationComponent |
stateFile | string | 存储数据的文件路径。 请确保目录存在这个文件并且Web服务器进程对这个它具有可写权限请确保目录存在这个文件并且Web服务器进程对这个它具有可写权限。 如果使用相对路径,请确保路径是正确的。 | CStatePersister |
公共方法
属性详细
cacheID
属性
public string $cacheID;
这个ID指定的是缓存应用组件,用于缓存应用程序状态数据。 默认是‘cache’指的是主缓存应用组件。 设置这个属性为false,将禁止缓存应用程序状态数据。
stateFile
属性
public string $stateFile;
存储数据的文件路径。 请确保目录存在这个文件并且Web服务器进程对这个它具有可写权限请确保目录存在这个文件并且Web服务器进程对这个它具有可写权限。 如果使用相对路径,请确保路径是正确的。
方法详细
init()
方法
public void init()
|
public function init()
{
parent::init();
if($this->stateFile===null)
$this->stateFile=Yii::app()->getRuntimePath().DIRECTORY_SEPARATOR.'state.bin';
$dir=dirname($this->stateFile);
if(!is_dir($dir) || !is_writable($dir))
throw new CException(Yii::t('yii','Unable to create application state file "{file}". Make sure the directory containing the file exists and is writable by the Web server process.',
array('{file}'=>$this->stateFile)));
}
初始化这个组件。 这个方法重载了父类的实现,添加了一个stateFile 的有效值。
load()
方法
public mixed load()
| ||
{return} | mixed | 状态数据,如果状态数据不可用返回null。 |
public function load()
{
$stateFile=$this->stateFile;
if($this->cacheID!==false && ($cache=Yii::app()->getComponent($this->cacheID))!==null)
{
$cacheKey='Yii.CStatePersister.'.$stateFile;
if(($value=$cache->get($cacheKey))!==false)
return unserialize($value);
else if(($content=@file_get_contents($stateFile))!==false)
{
$cache->set($cacheKey,$content,0,new CFileCacheDependency($stateFile));
return unserialize($content);
}
else
return null;
}
else if(($content=@file_get_contents($stateFile))!==false)
return unserialize($content);
else
return null;
}
从持久存储加载状态数据。
save()
方法
public void save(mixed $state)
| ||
$state | mixed | 状态数据(必须是序例化的)。 |
public function save($state)
{
file_put_contents($this->stateFile,serialize($state),LOCK_EX);
}
保存应用程序状态到持久存储。