2011-06-03 35 views

回答

0

當您存儲引用了資源(如文件描述符或數據庫連接)的對象時,會發生這種情況。如果你得到的對象是一個類,當你從memcached中得到它的時候它沒有被加載,它也會發生。

要找出哪個memcached密鑰失敗,可以在調用Memcached :: get之前設置一個自定義錯誤處理程序,該處理程序可以訪問memcached密鑰,然後再恢復它。然後,您可以將該警告與鑰匙一起記錄下來。

[編輯]這裏有一個例子:

<? 
class MyMemcachedWrapper { 

    private $key; 

    public function get($key) { 

     // Save the key in an instance variable so it will be available in 
     // the error handler 
     $this->key = $key; 

     set_error_handler(array($this, 'handleError')); 
     $value = Memcached::get($key); 
     restore_error_handler(); 

     return $value; 
    } 

    public function handleError($errno, $errstr) { 

     // Here we have both the key and the error message from memcached 
     $message = "Memcached error '$errstr' while fetching key '{this->key}'"; 

     // ... and we can log it to a file or db or something 
     file_put_contents("memcached-errors.log", $message, FILE_APPEND); 
    } 
} 

// Then use it like this 
$memcached_wrapper = new MyMemcachedWrapper(); 
$value = $memcached_wrapper->get('xyz'); 
+0

,我認爲你的答案是什麼,我需要。但我真的不知道如何繼續實現自定義錯誤處理程序,以便在GET之前訪問密鑰。你能給我一些代碼嗎? – Hao 2011-11-03 03:01:17

+0

我在找到鑰匙後還能做些什麼? – Hao 2011-11-03 04:15:15