包 | 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 |
公共方法
方法 | 描述 | 定义在 |
---|---|---|
__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()
|
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);
}
保存应用程序状态到持久存储。