当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形式还是可以正常运行的呢…