2011-09-02 5 views
3

dans un fichier php, j'ai:Module PHP Memcached: Comment savoir si la connexion a échoué?

<?php 
$m = new Memcached(); 
echo get_class($m); 
echo "<br>"; 
echo $m->addServer('192.168.1.77', 11211, 1); 
$m->set("foo", "bar"); 
?> 

lorsqu'il est exécuté, environ une demi-seconde plus tard, je reçois:

Memcached 
1 

Si j'arrête Memcached, après environ 5 secondes, je reçois:

Memcached 
1 

j'attendais quelque chose de plus comme ...

Memcached 
0 

Comment savez-vous si vous avez réussi à utiliser le serveur memcached ou non? Je me attendais bien qu'il soit aussi simple que d'une valeur de retour de addServer ... :(

+0

oh ouais ... et quelqu'un sait où la documentation officielle est pour le memcached php-module par le nom de "memcached" avec le 'd'? C'est tellement frustrant d'essayer de trouver la documentation actuelle quand ils l'ont nommé exactement le même nom que le démon ... ARGH! – MicronXD

+0

quel est le $ m-> addServer ('192.168.1.77', 11211, 1); résultats? –

+0

il renvoie '1' à chaque fois .. que mon démon memcached soit ou non en cours d'exécution sur cette adresse IP ou non ... – MicronXD

Répondre

3

C'est un peu ce que je cherchais: Memcached :: getStats();

Alors, je l'ai écrit:

add_memcached_server($m, $addr, $port) 
{ 
    $m->addServer($addr,$port); 
    $statuses = $m->getStats(); 
    return isset($statuses[$addr.":".$port]); 
} 

fonctionne comme un charme ...

+1

Cela ne fonctionne pas lors de la connexion à un Memcached avec SASL sans authentification SASL. – Dereckson

+2

Vous devez également vérifier le 'pid', car si un serveur est ajouté mais pas connecté, il apparaît toujours dans les statistiques, mais avec' pid = -1' alors je suggère ceci: 'return ($ statuses [$ addr. ":". $ port] ['pid']> 0); ' –

+0

Cela n'a pas fonctionné pour moi. –

-1

http://php.net/memcache.addserver affirme que

Lorsque vous utilisez cette méthode (par opposition à Memcache :: connect() et Memcache: :. pconnect()) la connexion réseau est établi qu'en fait nécessaire

donc il n'y a aucun moyen addServer sait si la connexion réseau est établie

utilisation http://php.net/memcache.connect à la place

+1

Même si cette réponse est correcte, 'connect' ne peut pas être remplacé par' addServer', car ce dernier est utilisé lorsque vous avez un pool de plusieurs serveurs memcached – zerkms

+1

http: // in2 .php.net/memcache.getServerStatus – kranthi117

+2

J'utilise 'memcached' (contrairement à' memcache' sans le 'd') – MicronXD

1

réponse est

/** 
    * check for connection was established 
    * @param resource $m 
    * @param string $host 
    * @param int $port 
    * @access public 
    * @return bool 
    */ 
    function memConnected($m, $host, $port = 11211) 
    { 
     $statuses = $m->getStats(); 
     return (isset($statuses[$host.":".$port]) and $statuses[$host.":".$port]["pid"] > 0); 
    } 
0

Voici comment je l'ai fait

/** 
* Add memcached server 
* @param String $new_ New Memcahed 
* @param String $addr Address 
* @param String $port Port 
* @return boolean 
*/ 
function add_memcached_server($new_, $addr, $port) 
{ 
    $new_->addServer($addr,$port); 
    $statuses = $new_->getStats(); 
    if($statuses[$addr.':'.$port]['uptime']<1){ 
     return false; 
    }else{ 
     return true; 
    } 
} 
Questions connexes