php memcached ошибка - PullRequest
       6

php memcached ошибка

4 голосов
/ 18 сентября 2010

Каждый раз, когда я пытаюсь использовать функцию add () для 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

Что может быть не так?Я использую эту библиотеку для codeigniter: http://github.com/trs21219/memcached-library

Ответы [ 4 ]

14 голосов
/ 18 сентября 2010

Вы на 64 битах? Похоже, что это недавно обнаруженная ошибка с pecl / memcache: http://pecl.php.net/bugs/bug.php?id=18567

Похоже, это связано с флагом сжатия. Это больше не может быть логическим значением, оно должно быть целым числом согласно этому исходному коду

/**
 * 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
 */
6 голосов
/ 18 июля 2014

Может быть, это ваш случай: некоторые руководства по использованию memcache, например, http://www.codeforest.net/how-to-install-memcached-on-windows-machine, имеют ошибку :

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

, но правильное использованиеПараметр истечения секунд (здесь 30 секунд):

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

или как

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

Пример руководства с правильным примером: http://zurmo.org/wiki/installing-memcache-on-windows
См. также документациюhttp://php.net/manual/ru/memcache.add.php

Для меня это был ключ.

5 голосов
/ 16 октября 2013

Вы можете добавить 'false' в качестве третьего параметра, у меня это сработало.

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);
1 голос
/ 15 марта 2015

Это может быть полезно для некоторых, я скачал библиотеку для codeigniter, которая использовала memcache, а не memcached для сеансов Его можно найти здесь: https://github.com/pierskarsenbarg/codeigniter-session-memcached

Проблема для меня заключалась в том, что когда библиотека использовала

memcache->set()

и / или

memcache->replace()

третий параметр - время истечения, а не допустимый тип флага.

т.е. MEMCACHE_COMPRESSED

Пример

Оригинальный код:

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

Измененный код:

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

После изменения третьего параметра на правильный тип флага ошибка исчезла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...