为什么连接不了啊
memcached服务启动了,php-memcache扩展安装了,权限好像也正常
Notice: Memcache::connect(): Server 127.0.0.1 (tcp 11211, udp 0) failed with: Permission denied (13) in /var/www/html/a.php on line 3
首先看memcached服务已经可以用了,我这里可以用get命令获取数据
[root@localhost home]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get five
VALUE five 0 5
12345
END
然后是phpinfo();也看到了php-memcache扩展
我的memcache.php测试代码:
$mem = new Memcache;
//$mem->connect("10.40.24.66", 11211);
$mem->connect("127.0.0.1", 11211);
//保存数据
$mem->set('key3', 'Mike', 0, 60);
$val = $mem->get('key1');
if(isset($val))echo "Get key1 value: " . $val ."";
echo '--';
exit;
以上都正常,但还是报错,搜索网上很久都没有答案。最后在kohana群里得到了大神Dreamsxin解答:
原因:原来是SELinux限制了httpd对外访问的权限。将其开启即可:
setsebool -P httpd_can_network_connect 1
或者
setsebool -P httpd_can_network_connect=1
聊天记录:
Dreamsxin
sestatus -v
shaiya 2015-8-20 17:29:04
[root@localhost html]# sestatus -v
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
sestatus -v
shaiya 2015-8-20 17:29:04
[root@localhost html]# sestatus -v
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Dreamsxi 2015-8-20 17:44:16
setsebool -P httpd_can_network_connect 1
Dreamsxi 2015-8-20 17:44:21
试下这个
Dreamsxi 2015-8-20 17:44:27
应该可以让PHP连接
setsebool -P httpd_can_network_connect 1
Dreamsxi 2015-8-20 17:44:21
试下这个
Dreamsxi 2015-8-20 17:44:27
应该可以让PHP连接
其他:
memcached是服务端,提供数据的set和get
libmemcaced是memcached的客户端库,还有个libmemcace现在用的较少
php-memcahed是php的memcached扩展(下载后编译到php中http://pecl.php.net/get/memcached-2.0.0.tgz),因为php_memcached是依赖libmemcached库,所以首先安装libmemcached库
很多东西不能安装,要更新yum源(yum makecache yum -y update),编译安装时还要yum -install -y gcc gcc++等。
http://fighter.blog.51cto.com/1318618/1243823
php_memcached支持binary protocol 协议,而php_memcache协议不支持,php_memcached支持对同一key的多进程的并发处理问题,
memcached还有个非常称赞的地方,就是flag不是在操作的时候设置了,而是有了一个统一的setOption()。Memcached实现了更多的memcached协议。