kev_hardy 发表于 2014-3-13 13:05:46

Cache_memcached iis_supported() 方法返回false



代码如下,为什么memcached和memcache 都不支持扩展了


难道哪里少步骤了



class CI_Cache_memcached extends CI_Driver {

    private $_memcached;    // Holds the memcached object

    protected $_memcache_conf   = array(
                  'default' => array(
                        'default_host'      => '127.0.0.1',
                        'default_port'      => 11211,
                        'default_weight'    => 1
                  )
                );

    // ------------------------------------------------------------------------   

    /**
   * Fetch from cache
   *
   * @param   mixed      unique key id
   * @return   mixed      data on success/false on failure
   */   
    public function get($id)
    {   
      $data = $this->_memcached->get($id);
      
      return (is_array($data)) ? $data : FALSE;
      //return empty($data) ? FALSE : $data;
    }

    // ------------------------------------------------------------------------

    /**
   * Save
   *
   * @param   string      unique identifier
   * @param   mixed      data being cached
   * @param   int            time to live
   * @return   boolean   true on success, false on failure
   */
    public function save($id, $data, $ttl = 60)
    {
      if (get_class($this->_memcached) == 'Memcached')
      {
            return $this->_memcached->set($id, array($data, time(), $ttl), $ttl);
      }
      else if (get_class($this->_memcached) == 'Memcache')
      {
            return $this->_memcached->set($id, array($data, time(), $ttl), 0, $ttl);
      }
      
      return FALSE;
    }

    // ------------------------------------------------------------------------
    /**
   * Delete from Cache
   *
   * @param   mixed      key to be deleted.
   * @return   boolean   true on success, false on failure
   */
    public function delete($id)
    {
      return $this->_memcached->delete($id);
    }

    // ------------------------------------------------------------------------
   
    /**
   * Clean the Cache
   *
   * @return   boolean      false on failure/true on success
   */
    public function clean()
    {
      return $this->_memcached->flush();
    }

    // ------------------------------------------------------------------------

    /**
   * Cache Info
   *
   * @param   null      type not supported in memcached
   * @return   mixed         array on success, false on failure
   */
    public function cache_info($type = NULL)
    {
      return $this->_memcached->getStats();
    }

    // ------------------------------------------------------------------------
   
    /**
   * Get Cache Metadata
   *
   * @param   mixed      key to get cache metadata on
   * @return   mixed      FALSE on failure, array on success.
   */
    public function get_metadata($id)
    {
      $stored = $this->_memcached->get($id);

      if (count($stored) !== 3)
      {
            return FALSE;
      }

      list($data, $time, $ttl) = $stored;

      return array(
            'expire'    => $time + $ttl,
            'mtime'      => $time,
            'data'      => $data
      );
    }

    // ------------------------------------------------------------------------

      /**

         * Setup memcached.

         */

      private function _setup_memcached(){

      // Try to load memcached server info from the config file.

            $CI =& get_instance();

            if ($CI->config->load('memcached', TRUE, TRUE)){

                if (is_array($CI->config->config['memcached']))
                {

                  $this->_memcache_conf = NULL;

                  foreach ($CI->config->config['memcached'] as $name => $conf)
                  {
   
                        $this->_memcache_conf[$name] = $conf;
   
                  }

                }

            }      

            //$this->_memcached = new Memcached();// compatibility memcached memcache

            if (extension_loaded('memcached')){

                $this->_memcached = new Memcached();

            }else{

                $this->_memcached = new Memcache();

            }
            
      

            foreach ($this->_memcache_conf as $name => $cache_server)
            {

                if ( ! array_key_exists('hostname', $cache_server))
                {

                  //$cache_server['hostname'] = $this->_default_options['default_host'];//no _default_options

                  $cache_server['hostname'] = $this->_memcache_conf['default']['default_host'];

                }

                if ( ! array_key_exists('port', $cache_server))
                {

                  $cache_server['port'] = $this->_memcache_conf['default']['default_port'];//no _default_options

                }

                if ( ! array_key_exists('weight', $cache_server))
                {

                  $cache_server['weight'] = $this->_memcache_conf['default']['default_weight'];//no _default_options

                }

                // $this->_memcached->addServer(

                // $cache_server['hostname'], $cache_server['port'], $cache_server['weight']

                // );

                if (extension_loaded('memcached')){

                  $this->_memcached->addServer(

                        $cache_server['hostname'], $cache_server['port'], $cache_server['weight']

                  );

                }else{
                  $this->_memcached->addServer($cache_server['hostname'],$cache_server['port'],TRUE,$cache_server['weight']);
                   }
                /* else{

                  $this->_memcached->addServer($cache_server['hostname'],$cache_server['port'],TRUE, $cache_server['weight']);

                } */

            }

      }

    // ------------------------------------------------------------------------


      /**

      * Is supported

      *

      * Returns FALSE if memcached is not supported on the system.

      * If it is, we setup the memcached object & return TRUE

      */

      public function is_supported(){

            if (!extension_loaded('memcached')&&!extension_loaded('memcache'))//if ( ! extension_loaded('memcached'))
            {

                log_message('error', 'The Memcached Extension must be loaded to use Memcached Cache.');

                return FALSE;

            }

            $this->_setup_memcached();

            return TRUE;

      }

    // ------------------------------------------------------------------------

}
// End Class

/* End of file Cache_memcached.php */
/* Location: ./system/libraries/Cache/drivers/Cache_memcached.php */


一叶扁舟 发表于 2014-3-14 08:42:01

is_supported()
页: [1]
查看完整版本: Cache_memcached iis_supported() 方法返回false