2013-07-15 95 views
0

我想爲我的應用程序構建一個配置解析器,我今天安裝了APC,但是每次我嘗試在存儲中放入一個序列化對象時,它都沒有進入,也沒有進入。 (我正在使用apc.php在PHP 5.3.16 [我的開發環境]上檢查我的版本[3.1.8-dev],所以我確信數據不在緩存中)。這就是我如何將數據傳遞到cacher的:PHP存儲對象時的APC問題

// The data before the caching 
array (
'key' => md5($this->filename), 
'value' => serialize($this->cfg) 
); 

// The caching interface 
function($argc){ 
$key = $argc['key']; 
Cache\APC::getInstance()->set($key,$argc['value']); 
} 

// The caching method described above 
public function set($key, $val) { 
    if (apc_exists($key)) { 
     apc_delete ($key); 
     return apc_store($key, $val); 
    } 
    else 
     return false; 
} 


// the constructor of the configuration class. 
// It 1st looks for the configuration in 
// the cache if it is not present performs the reading from the file. 
public function __construct($filename = '/application/config/application.ini', 
           $type = self::CONFIG_INI) 
{ 
    if (defined('SYSTEM_CACHE') && SYSTEM_CACHE === 'APC'){ 
     $key = md5($filename); 
     $cfg = APC::getInstance()->get($key); 

     if (!empty($cfg)) { 

      print "From Cache"; 

      $this->cfg = unserialize($cfg); 
      return; 
     } else { 
      print "From File"; 
     } 

    } 
} 

我做了一些測試並沒有使用MD5()鍵(我在寫這個問題想)有問題,也不與APC本身。我真的被困在這一塊,沒有什麼奇怪的日誌,所以如果任何人可以給我至少一些方向將非常感激。

在此先感謝!

回答

2

的問題是在我的代碼:\

public function set($key, $val) { 
    /* 
    * 
    * If the key exists in the cache delete it and store it again, 
    * but how could it exist when the else clause is like that... 
    */ 
    if (apc_exists($key)) { 
     apc_delete ($key); 
     return apc_store($key, $val); 
    } 
    // This is very wrong in the current case 
    // cuz the function will never store and the if will 
    // never match.. 
    else 
     return false; 
} 

注意: 一直覺得和睜大你的眼睛,如果你仍然無法找到任何下車PC,並給自己一個休息。 10-15分鐘後回來,並將代碼下載。它有助於! :D