/** * Performs the test. * * @return \Jyxo\Beholder\Result */ public function run() : \Jyxo\Beholder\Result { // The memcached or memcache extension is required if (!extension_loaded('memcached') && !extension_loaded('memcache')) { return new \Jyxo\Beholder\Result(\Jyxo\Beholder\Result::NOT_APPLICABLE, 'Extension memcached or memcache required'); } $random = md5(uniqid((string) time(), true)); $key = 'beholder-' . $random; $value = $random; // Status label $description = (false !== filter_var($this->host, FILTER_VALIDATE_IP) ? gethostbyaddr($this->host) : $this->host) . ':' . $this->port; if (extension_loaded('memcached')) { // Connection $memcached = new \Memcached(); if (false === $memcached->addServer($this->host, $this->port)) { return new \Jyxo\Beholder\Result(\Jyxo\Beholder\Result::FAILURE, sprintf('Connection error %s', $description)); } } else { // Connection (@ due to notice) $memcached = new \Memcache(); if (false === @$memcached->connect($this->host, $this->port)) { return new \Jyxo\Beholder\Result(\Jyxo\Beholder\Result::FAILURE, sprintf('Connection error %s', $description)); } } // Saving if (false === $memcached->set($key, $value)) { if ($memcached instanceof \Memcached) { $memcached->quit(); } else { $memcached->close(); } return new \Jyxo\Beholder\Result(\Jyxo\Beholder\Result::FAILURE, sprintf('Write error %s', $description)); } // Check $check = $memcached->get($key); if (false === $check || $check !== $value) { if ($memcached instanceof \Memcached) { $memcached->quit(); } else { $memcached->close(); } return new \Jyxo\Beholder\Result(\Jyxo\Beholder\Result::FAILURE, sprintf('Read error %s', $description)); } // Deleting if (false === $memcached->delete($key)) { if ($memcached instanceof \Memcached) { $memcached->quit(); } else { $memcached->close(); } return new \Jyxo\Beholder\Result(\Jyxo\Beholder\Result::FAILURE, sprintf('Delete error %s', $description)); } // Disconnect if ($memcached instanceof \Memcached) { $memcached->quit(); } else { $memcached->close(); } // OK return new \Jyxo\Beholder\Result(\Jyxo\Beholder\Result::SUCCESS, $description); }
public function __destruct() { return $this->_memcached->quit(); }