2010-09-18 14 views
3

Chaque fois que j'essaie d'utiliser la fonction add() pour memcached, je reçois l'erreur suivante:php erreur memcached

A PHP Error was encountered 

Severity: Warning 

Message: MemcachePool::add(): The lowest two bytes of the flags array is reserved for pecl/memcache internal use 

Filename: libraries/memcached_library.php 

Line Number: 92 

Quoi de mal? J'utilise cette bibliothèque pour codeigniter: http://github.com/trs21219/memcached-library

Répondre

13

Êtes-vous sur 64 bits? On dirait que c'est un bogue trouvé récemment avec pecl/memcache: http://pecl.php.net/bugs/bug.php?id=18567

Il semble que cela ait à voir avec le drapeau de compression. Il ne peut pas être un booléen plus, il doit être un entier selon this source code

/** 
* The compressed argument on Memcache::add, Memcache::set and Memcache::replace takes 
* an integer not a boolean. Since pecl/memcache 3.0.3 booleans now leads to warnings like 
* The lowest two bytes of the flags array is reserved for pecl/memcache internal use 
*/ 
+2

Parfait. Merci. J'ai changé la compression de TRUE à 0 et tout fonctionne bien maintenant. – Matthew

+0

J'utilisais Memcache sur Windows et je faisais face au même problème. Juste pour répéter, 'Compression' sera le troisième argument si les passes qui doivent être 0 pour le résoudre. Ref: http: //php.net/manual/en/memcache.set.php – kta

5

Vous pouvez ajouter « false » comme troisième paramètre, il a travaillé pour moi.

Warning (2): MemcachePool::add() [memcachepool.add]: The lowest two bytes of the flags array is reserved for pecl/memcache internal use 

From: 
return $this->memcache->add($name, $value, $expiry); 

To: 
return $this->memcache->add($name, $value, false, $expiry); 
+0

Oui, les méthodes Memcache et Memcached dans le PHP sont différentes –

5

Peut être c'est votre cas: certains manuels pour memcache en utilisant, comme http://www.codeforest.net/how-to-install-memcached-on-windows-machine, ont une erreur: paramètre

$memcache->add("key", $tmp, 30); 

mais correcte utilisation de secondes d'expiration (30 sec ici) est :

$memcache->add("key", $tmp, MEMCACHE_COMPRESSED, 30); 

ou comme

$memcache->add("key", $tmp, false, 30); 

Exemple de manuel avec exemple correct: http://zurmo.org/wiki/installing-memcache-on-windows
Voir aussi la documentation http://php.net/manual/ru/memcache.add.php

Pour moi, ce fut la clé.

1

Cela pourrait être utile pour certains, j'avais téléchargé une bibliothèque pour codeigniter qui a fait usage de memcache pas memcached pour les sessions. Il se trouve ici: https://github.com/pierskarsenbarg/codeigniter-session-memcached

Le problème pour moi est que lorsque la lib utilisait

memcache->set() 

et/ou

memcache->replace() 

le troisième paramètre est le délai d'expiration et non valide type de drapeau.

-à-dire MEMCACHE_COMPRESSED

Exemple

Code d'origine:

$this->memcache->set('user_session_data' . $this->userdata['session_id'], $this->userdata, $this->sess_expiration); 

Code de Changé:

$this->memcache->set('user_session_data' . $this->userdata['session_id'], $this->userdata, MEMCACHE_COMPRESSED, $this->sess_expiration); 

Après avoir modifié le troisième paramètre à un indicateur de type correct l'erreur a un moyen.

+1

Vous avez répondu en fait juste la même chose que je fais, mais à propos de codeigniter memcached caractéristique bug. Je pense que c'est utile aussi - upvote. – FlameStorm