CStatePersister

优质
小牛编辑
134浏览
2023-12-01
所有包 | 属性 | 方法
system.base
继承class CStatePersister » CApplicationComponent » CComponent
实现IApplicationComponent, IStatePersister
源自1.0
版本$Id: CStatePersister.php 3515 2011-12-28 12:29:24Z mdomba $
源码framework/base/CStatePersister.php
CStatePersister实现一个基于文件的持久数据存储。

它可以用来保持多个请求或会话的数据。

默认, CStatePersister存储数据在一个名字叫‘state.bin’文件中它位于应用程序指定的 runtime 路径下。 你可以通过设置stateFile属性来改变它的位置。

从CStatePersister调用数据使用load()。保存数据使用 save().

持久数据,会话和缓存之间的比较如下:
  • session:单个用户的会话持久数据.
  • state persister:所有请求的/会话的持久数据(例如,点击统计)。
  • cache:不稳定并快速的储诸。它可的使用介于会话和持久数据之间。


因为服务器的资源通常有限, 如果你计划使用CStatePersister存储大量的数据。 你应该考虑使用吞吐性高的 基于数据的持久存储。

CStatePersister是一个核心的应用组件,用于存储全局的应用程序状态。 你也可以通过访问CApplication::getStatePersister() 了解基于缓存的页面持久存储。

公共属性

隐藏继承属性

属性类型描述定义在
behaviorsarray这个应用组件附加的行为。 这此行为将在应用组件调用init时附加在应用组件上。 请参照CModel::behaviors如何指定此属性值。CApplicationComponent
cacheIDstring这个ID指定的是缓存应用组件,用于缓存应用程序状态数据。 默认是‘cache’指的是主缓存应用组件。 设置这个属性为false,将禁止缓存应用程序状态数据。CStatePersister
isInitializedboolean检查应用组件是否已经初始化。CApplicationComponent
stateFilestring存储数据的文件路径。 请确保目录存在这个文件并且Web服务器进程对这个它具有可写权限请确保目录存在这个文件并且Web服务器进程对这个它具有可写权限。 如果使用相对路径,请确保路径是正确的。CStatePersister

公共方法

隐藏继承方法

方法描述定义在
__call()如果类中没有调的方法名,则调用这个方法。CComponent
__get()返回一个属性值、一个事件处理程序列表或一个行为名称。CComponent
__isset()检查一个属性是否为null。CComponent
__set()设置一个组件的属性值。CComponent
__unset()设置一个组件的属性为null。CComponent
asa()返回这个名字的行为对象。CComponent
attachBehavior()附加一个行为到组件。CComponent
attachBehaviors()附加一个行为列表到组件。CComponent
attachEventHandler()为事件附加一个事件处理程序。CComponent
canGetProperty()确定属性是否可读。CComponent
canSetProperty()确定属性是否可写。CComponent
detachBehavior()从组件中分离一个行为。CComponent
detachBehaviors()从组件中分离所有行为。CComponent
detachEventHandler()分离一个存在的事件处理程序。CComponent
disableBehavior()禁用一个附加行为。CComponent
disableBehaviors()禁用组件附加的所有行为。CComponent
enableBehavior()启用一个附加行为。CComponent
enableBehaviors()启用组件附加的所有行为。CComponent
evaluateExpression()计算一个PHP表达式,或根据组件上下文执行回调。CComponent
getEventHandlers()返回一个事件的附加处理程序列表。CComponent
getIsInitialized()检查应用组件是否已经初始化。CApplicationComponent
hasEvent()确定一个事件是否定义。CComponent
hasEventHandler()检查事件是否有附加的处理程序。CComponent
hasProperty()确定属性是否被定义。CComponent
init()初始化这个组件。CStatePersister
load()从持久存储加载状态数据。CStatePersister
raiseEvent()发起一个事件。CComponent
save()保存应用程序状态到持久存储。CStatePersister

属性详细

cacheID 属性 public string $cacheID;

这个ID指定的是缓存应用组件,用于缓存应用程序状态数据。 默认是‘cache’指的是主缓存应用组件。 设置这个属性为false,将禁止缓存应用程序状态数据。

stateFile 属性 public string $stateFile;

存储数据的文件路径。 请确保目录存在这个文件并且Web服务器进程对这个它具有可写权限请确保目录存在这个文件并且Web服务器进程对这个它具有可写权限。 如果使用相对路径,请确保路径是正确的。

方法详细

init() 方法
public void init()
源码: framework/base/CStatePersister.php#63 (显示) publicfunctioninit()
{
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))
thrownewCException(Yii::t('yii','Unabletocreateapplicationstatefile"{file}".MakesurethedirectorycontainingthefileexistsandiswritablebytheWebserverprocess.',
array('{file}'=>$this->stateFile)));
}

初始化这个组件。 这个方法重载了父类的实现,添加了一个stateFile 的有效值。

load() 方法
public mixed load()
{return}mixed状态数据,如果状态数据不可用返回null。
源码: framework/base/CStatePersister.php#78 (显示) publicfunctionload()
{
$stateFile=$this->stateFile;
if($this->cacheID!==false&&($cache=Yii::app()->getComponent($this->cacheID))!==null)
{
$cacheKey='Yii.CStatePersister.'.$stateFile;
if(($value=$cache->get($cacheKey))!==false)
returnunserialize($value);
elseif(($content=@file_get_contents($stateFile))!==false)
{
$cache->set($cacheKey,$content,0,newCFileCacheDependency($stateFile));
returnunserialize($content);
}
else
returnnull;
}
elseif(($content=@file_get_contents($stateFile))!==false)
returnunserialize($content);
else
returnnull;
}

从持久存储加载状态数据。

save() 方法
public void save(mixed $state)
$statemixed状态数据(必须是序例化的)。
源码: framework/base/CStatePersister.php#104 (显示) publicfunctionsave($state)
{
file_put_contents($this->stateFile,serialize($state),LOCK_EX);
}

保存应用程序状态到持久存储。