blob: 2d6f5e9ee227448246385e493a47c5ef20d4a66b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
<?php
/**
* TApplication class file
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.pradosoft.com/
* @copyright Copyright © 2005-2014 PradoSoft
* @license http://www.pradosoft.com/license/
* @package Prado
*/
namespace Prado;
/**
* TApplicationStatePersister class.
* TApplicationStatePersister provides a file-based persistent storage
* for application state. Application state, when serialized, is stored
* in a file named 'global.cache' under the 'runtime' directory of the application.
* Cache will be exploited if it is enabled.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @package Prado
* @since 3.0
*/
class TApplicationStatePersister extends \Prado\TModule implements IStatePersister
{
/**
* Name of the value stored in cache
*/
const CACHE_NAME='prado:appstate';
/**
* Initializes module.
* @param TXmlElement module configuration (may be null)
*/
public function init($config)
{
$this->getApplication()->setApplicationStatePersister($this);
}
/**
* @return string the file path storing the application state
*/
protected function getStateFilePath()
{
return $this->getApplication()->getRuntimePath().'/global.cache';
}
/**
* Loads application state from persistent storage.
* @return mixed application state
*/
public function load()
{
if(($cache=$this->getApplication()->getCache())!==null && ($value=$cache->get(self::CACHE_NAME))!==false)
return unserialize($value);
else
{
if(($content=@file_get_contents($this->getStateFilePath()))!==false)
return unserialize($content);
else
return null;
}
}
/**
* Saves application state in persistent storage.
* @param mixed application state
*/
public function save($state)
{
$content=serialize($state);
$saveFile=true;
if(($cache=$this->getApplication()->getCache())!==null)
{
if($cache->get(self::CACHE_NAME)===$content)
$saveFile=false;
else
$cache->set(self::CACHE_NAME,$content);
}
if($saveFile)
{
$fileName=$this->getStateFilePath();
file_put_contents($fileName,$content,LOCK_EX);
}
}
}
|