예제 #1
0
파일: cache.php 프로젝트: pelloq1/SobiPro
 /**
  * @param $type
  * @param $id
  * @param int $sid
  * @param bool $force
  * @return bool
  */
 public function getObj($type, $id, $sid = 0, $force = false)
 {
     if ($this->enabled(!$force)) {
         $sid = $sid ? $sid : $this->_section;
         $id = (int) $id;
         $sid = (int) $sid;
         $lang = Sobi::Lang(false);
         $apc = false;
         if ($this->_apc) {
             $var = apc_fetch("com_sobipro_{$sid}_{$id}_{$type}_{$lang}", $apc);
             if (isset($var['classes'])) {
                 SPLoader::wakeUp(unserialize($var['classes']));
             }
         }
         if (!$apc) {
             $result = $this->Query("SELECT * FROM objects WHERE( type = '{$type}' AND id = '{$id}' AND lang = '{$lang}' AND sid = '{$sid}' )");
             if (!is_array($result) || !count($result)) {
                 return false;
             }
             if ($result['classes']) {
                 SPLoader::wakeUp(unserialize($result['classes']));
             }
             if ($result['schecksum'] != md5($result['data'])) {
                 Sobi::Error('cache', SPLang::e('Checksum of the encoded data does not match'), SPC::WARNING, 0, __LINE__, __FILE__);
                 return false;
             }
             $var = SPConfig::unserialize($result['data']);
         } else {
             $var = $var['obj'];
         }
         $this->_check[$type][$id] = false;
         return $var;
     } else {
         return false;
     }
 }