当Memcached连接失败时的记录

因为在使用PHP的memcached时遇到了SELinux的限制,所以记录下来。

$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);

安装和添加库已完成,并在控制台上运行,这时我正准备进行实现!

$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;

上述的代码出现错误“内存缓存错误[3][连接失败]”。
尽管在交互式Shell(php -a)中可以正常连接,但为什么呢?是FPM的配置问题吗?还是可能有其他运行中的不同路径的php?我们进行了各种尝试,最后万不可再试,尝试使用”setenforce 0″再次执行,结果通过了。
感觉很简单,就是SELinux啊!我们失望地搜索了配置选项。

$ getsebool -a | grep memcache

httpd_can_network_memcache --> off

这个吗。。。 (Zhè ge ma…)

$ 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被关闭了所以出现了问题。
即使被关闭了,交互式shell形式还是可以正常运行的呢…

广告
将在 10 秒后关闭
bannerAds