Memcached не работает в веб-браузере, но использует команду php - PullRequest
0 голосов
/ 21 мая 2018

У меня есть код testMemcached.php ниже.

<?php
include_once "common.php";
include_once "api.php";
class TestMemcached extends API{
    function impl(){
         $m = $this->getMem();
         $stats = $m->getStats();
         var_dump($stats);

        $m->add("Key","test");
        echo "Value:".$m->get("Key");
    }
}
$api = new TestMemcached();
$api->go();

Я запускаю testMemcached.php в веб-браузере.Я получаю bool(false) Value:.

Я запускаю команду php -f testMemcached.php, затем получаю вывод ниже.

array(1) {
  ["localhost:11211"]=>
  array(24) {
    ["pid"]=>
    int(10218)
     ....(skip)
    ["version"]=>
    string(6) "1.4.15"
  }
}
Value:test

Я не знаю, в чем разница и как исправить, что memcached не работает ввеб-браузер.

Моя среда: CentOS 7. LNMP.

2018/05/23 Обновление: Я использую telnet 127.0.0.1 11211 для проверки функции memcached Я обнаружил, что add и set не работает.

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set test testValue
ERROR
add test testValue 
ERROR
get test
END

Это мои настройки memcached из phpinfo ниже.This is my memcached setup from phpinfo

Я использую код getResultCode() ниже, чтобы найти ошибку. Это мой результат теста.

MemcachedFunction ResultCode ErrorDescription
stats 3 MEMCACHED_CONNECTION_FAILURE
set 3 MEMCACHED_CONNECTION_FAILURE
add 47 MEMCACHED_SERVER_TEMPORARILY_DISABLED
get 47 MEMCACHED_SERVER_TEMPORARILY_DISABLED
fetchAll 16 MEMCACHED_NOTFOUND 

Мой код теста здесь.Вывод в комментариях.

<?php
include_once 'vendor/autoload.php';
$m = new Memcached();
$m->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
$m->addServer("localhost","11211");
$stats = $m->getStats();
echo "stats ".$m->getResultCode()."<br>"; // stats 3
var_dump($stats); // bool(false)
echo "<br>";
$m->set("Key","test");
echo "set ".$m->getResultCode()."<br>"; // set 3
$m->add("Key","test");
echo "add ".$m->getResultCode()."<br>"; // add 47
echo "Value:".$m->get("Key")."<br>"; // Value:
echo "get ".$m->getResultCode()."<br>"; // get 47
var_dump($m->fetchAll()); // bool(false) 
echo "<br>";
echo "fetchAll ".$m->getResultCode()."<br>"; // fetchAll 16
var_dump($m->getAllKeys()); // bool(false)

1 Ответ

0 голосов
/ 02 сентября 2018

Однажды я столкнулся с похожей проблемой.В моем случае использование ip-адреса вместо localhost работало.

$cache_server_host = '12*.45*.***.***';// Your server's ip address here.
$cache_server_port = 11211;

$cache_obj = NULL;
$is_cache_available = FALSE;

try {
  if (class_exists('Memcache')) {
    $cache_obj = new Memcache;
    $is_cache_available = $cache_obj->connect($cache_server_host, $cache_server_port);
  };
}
catch (Exception $e) {}

if (!empty($is_cache_available)) {
  // Ok to use the cache;
  // i.e.- $cache_obj->set($key, $val, ...);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...