LoginSignup
5
4

More than 5 years have passed since last update.

MemcachedでCONNECTION FAILUREになったときの記録

Posted at

PHPでmemcachedを使おうと思ったらSELinuxでひっかかってしまったのでメモ。

console
$m = new Memcached();
$result = $m->addServer('localhost', 11211);
if(!$result) {
    echo 'addServer return false';
    exit;
}
$value = $m->get('hoge');
var_dump($value);
$result = $m->set('hoge', 'test');
var_dump($result);
$value = $m->get('hoge');
var_dump($result);

インストールもライブラリの追加も完了し、コンソール上で動いたのでいざ実装!と思っていたら

sample.php
$m = new Memcached();
$result = $m->addServer('localhost', 11211);
if(!$result) {
    throw new Exception('addServer return false');
    exit;
}
if(!($value = $m->get('hoge'))) {
    $rc = $m->getResultCode();
    if($rc == Memcached::RES_NOTFOUND) {
        echo 'key empty!';
    } else {
        throw new Exception(sprintf('memcached error [%d][%s]', $rc, $m->getResultMessage());
    }
}
echo 'hit! ', $value;

上記コードでエラー「memcached error [3][CONNECTION FAILURE]」。
対話シェル(php -a)だと正常に繋がるのに、なぜ?fpmの設定?もしかして違うパスのphpが動いてる?といろいろ試し、まさかと思い「setenforce 0」にしてから再度実行したら通った。
ただのSELinuxかよーと落胆し、設定項目を探して

$ getsebool -a | grep memcache

httpd_can_network_memcache --> off

これか・・・

$ sudo setsebool -P httpd_can_network_memcache true
$ getsebool httpd_can_network_memcache

httpd_can_network_memcache --> on

もちろん「setenforce 1」でSELinuxを戻すのも忘れずに。
再度実行

hit! test

動いた!ということで原因はSELinuxのhttpd_can_network_memcacheがoffになっていたせいでした。
offになってても対話シェル形式だと普通に動作するんだね…

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4