memcache为PHP – 无法连接

我运行centos 6.使用Apache处理PHP和Nginx处理脚本图像和CSS

我已经安装了memcached服务器。

PORT="11211" USER="memcached" MAXCONN="4096" CACHESIZE="512" OPTIONS="-l 127.0.0.1" 

我也安装了PHP的模块。

我创build了一个新的PHP文件

  $memcache = new Memcache; $memcache->connect('127.0.0.1', 11211) or die ("Could not connect"); 

我检查了memcached的状态,它正在运行。
我总是得到“无法连接”。
我试图从“127.0.0.1”更改为“本地主机” – 仍然无法正常工作。

 $memcache = new Memcache(); $memcache->addServer('127.0.0.1', 11211) or die ("Could not connect"); var_dump($memcache->getExtendedStats()); $memcache->set('key', 'hello world', false, 60); echo $memcache->get('key'); //$memcache->connect('127.0.0.1', 11211) or die ("Could not connect"); 

产量

  array(1){[“127.0.0.1:11211”] => bool(false)} 

connect和addServer有什么不同? 哪个是最好的办法?
但我没有得到你好世界

关于代码和这个问题的更多更新

phpinfo正在显示memcached。
后续代码var_dump($ memcache-> GET( '键')); 给

 布尔(假) 

为什么我应该使用addServer而不是连接

代码更多更新

 $memcache = new Memcache; $memcache->addServer('localhost', 11211); echo $memcache->getServerStatus('localhost', 11211); output : 1 //$memcache->set('key', 'hello world') or die("failed to store data"); output : failed to store data 

几个细节

  getsebool httpd_can_network_memcache 

它返回

它应该回来吗?

注意:Memcache :: connect():服务器127.0.0.1(tcp 11211,udp 0)失败,因为:Permission denied(13)

如注释中所示,似乎您正在运行安全增强型Linux(SELinux),它在内核级别添加了额外的安全层。 根据我的经验和使用情况,我发现SELinux围绕某些服务添加了一个强制字段,以便它们不能访问系统上的特定资源。 例如,如果我想从/home/src/web提供html内容,我必须告诉系统,httpd服务访问/home/src/web路径中的内容是可以的。 要做到这一点,我会发出以下命令:

 $ -> setsebool -P httpd_enable_homedirs 1 

基本上,为了允许服务之间的交叉通信,你必须通过策略允许这样的访问,就像“引导”一个防火墙允许访问一个特定的端口,除了SELinux你不允许访问一个端口,而你是准许访问系统的另一部分或服务。 对我们来说幸运的是,有几个内置的策略可以使用上面的setsebool构造,而不是试图定义我们自己的策略,这可能是一个痛苦。 有关SELinux更完整的说明,请查看维基百科页面 。

现在回答你的具体问题:

为什么我应该使用addserver而不是连接?

addserver()将允许您将多个ips(或主机名)添加到从中假定缓存值存在的列表,即一组memcache服务器。 而connect()将只允许您连接到单个指定的服务器。

getsebool httpd_can_network_memcache,它返回关闭,应该返回吗?

是的,似乎打开这个特定的设置将允许你连接到启用了SELinux的memcache服务器,但是在我的生产服务器上,我仍然把它设置为off,但是有以下设置:

 $ -> setsebool -P httpd_can_network_connect 1 

我相信,这两种设置都可以达到目的,但是通过上述设置,如果在另一台主机上有一个memcache服务器,httpd仍然可以访问它。

这里是一个体面的文章引导SELinux允许httpd服务访问其他服务。