00001 <?php
00002
00003
00004
00005
00006
00007
00008 class CacheDBImpl implements ICachePersister {
00009 private $cache_item = null;
00010
00011
00012
00013
00014 public function is_cached($cache_keys) {
00015 $dao = new DAOCache();
00016 $dao->add_where('content_gzip', DBWhere::OP_NOT_NULL);
00017 $dao->set_keys($this->extract_keys($cache_keys));
00018 $dao->add_where('expirationdate', '>', DBFieldDateTime::NOW);
00019
00020 if ($dao->find(DAOCache::AUTOFETCH)) {
00021 $this->cache_item = $dao;
00022 return true;
00023 }
00024 else {
00025 $this->cache_item = false;
00026 return false;
00027 }
00028 }
00029
00030
00031
00032
00033
00034
00035
00036 public function read($cache_keys) {
00037 $dao = new DAOCache();
00038 $dao->add_where('content_gzip', DBWhere::OP_NOT_NULL);
00039 $dao->set_keys($this->extract_keys($cache_keys));
00040 $dao->add_where('expirationdate', '>', DBFieldDateTime::NOW);
00041
00042 if ($dao->find(DAOCache::AUTOFETCH)) {
00043 return $dao;
00044 }
00045 else {
00046 return false;
00047 }
00048 }
00049
00050
00051
00052
00053
00054
00055
00056 public function store($cache_keys, $content, $cache_life_time, $data = '', $is_compressed = false) {
00057 try {
00058
00059 $this->remove_expired();
00060 $dao = new DAOCache();
00061 $dao->set_keys($this->extract_keys($cache_keys));
00062 $update = $dao->find(DAOCache::AUTOFETCH);
00063
00064 if ($is_compressed) {
00065 $dao->set_content_compressed($content);
00066 }
00067 else {
00068 $dao->set_content_plain($content);
00069 }
00070 $dao->data = $data;
00071 $dao->expirationdate = time() + $cache_life_time;
00072 if ($update) {
00073 $dao->update();
00074 }
00075 else {
00076 $dao->insert();
00077 }
00078 }
00079 catch (Exception $ex) {
00080
00081 @error_log($ex->getMessage());
00082 }
00083 }
00084
00085
00086
00087
00088
00089
00090 public function clear($cache_keys = NULL) {
00091 $dao = new DAOCache();
00092 if (!empty($cache_keys)) {
00093 $keys = $this->extract_keys($cache_keys);
00094 $dao->set_keys($keys, true);
00095 }
00096 $dao->delete(DAOCache::WHERE_ONLY);
00097 }
00098
00099
00100
00101
00102
00103
00104 private function extract_keys($cache_keys) {
00105 if (is_array($cache_keys)) {
00106 return array_values($cache_keys);
00107 }
00108 else if (is_string($cache_keys) || is_numeric($cache_keys)) {
00109 return array($cache_keys);
00110 }
00111 return array();
00112 }
00113
00114
00115
00116
00117 public function remove_expired() {
00118 $dao = new DAOCache();
00119 $dao->add_where('expirationdate', '<', DBFieldDateTime::NOW);
00120 $dao->delete(DAOCache::WHERE_ONLY);
00121 }
00122 }