我在Centos 6.4上安装了PHP 5.3.3,扩展名为memcached.so
,而httpd在版本2.2.15-26下运行。这是我的index.php
:
$mc = new \Memcached();
$mc->addServer('127.0.0.1', 11211);
$mc->set("test", "blah");
var_dump($mc->getResultCode());
var_dump($mc->getResultMessage());
var_dump($mc->get("test"));
die;
当我从命令行运行它时,可以运行。我得到以下内容:
10:22:33 $ php index.php
int(0)
string(7) "SUCCESS"
string(4) "blah"
memcache服务器也可以在telnet上运行。但是,当我从网络上运行index.php
时,就会失败。我得到以下内容(来自查看网页来源):
int(47)
string(51) "SERVER HAS FAILED AND IS DISABLED UNTIL TIMED RETRY"
bool(false)
如果没有重新安装我的操作系统并尝试不同版本的垃圾,任何人都可以解释可能导致此问题的原因吗?
答案 0 :(得分:2)
是 SELinux 问题吗? Cli可以访问Memcached但守护进程没有。试试这个:
getenforce
了解您是否启用了SELinux setenforce 0
禁用它reboot
如果好,您必须配置Apache才能访问Memcached。
答案 1 :(得分:2)
我在CentOS上有类似的问题,我发现它我正在运行SELinux,阻止httpd连接到memcached。你需要在下面设置,
# setsebool -P httpd_can_network_memcache 1
# getsebool httpd_can_network_memcache
httpd_can_network_memcache --> on
答案 2 :(得分:0)
请确保您的memcache服务应绑定所有IP。默认值为127.0.0.1。将其更改为0.0.0.0以支持所有已定义的Ips。另外,不要忘记控制你的iptables或防火墙。
答案 3 :(得分:0)
我在WAMP 2.4中遇到了这个问题,在命令行中运行了一个简单的Memcache测试脚本,但是没有在浏览器中运行。
答案结果非常平凡:WAMP有两个php.ini文件,而我正在编辑错误的文件。
E.g。 Apache使用了这个:c:\ wamp \ bin \ apache \ Apache2.4.4 \ bin \ php.ini WAMP也有这个:c:\ wamp \ bin \ php \ php5.4.12 \ php.ini
将extension = php_memcache.dll放入正确的.ini文件中。
我的线索是这样的问题是phpInfo()加载的配置文件在两种情况下报告了不同的值。
答案 4 :(得分:0)
我遇到与OP所描述的完全相同的问题。原来,问题是由memcached扩展内部维护的服务器列表引起的。我的代码类似于:
$serversList = $memcached->getServerList();
if (empty($serversList)) {
$memcached->addServer($host, $port);
}
我对测试脚本的初始调用是使用$ port的错误值完成的。呼叫是从web(apache)而不是cli完成的。在我更正端口并再次运行代码后,它正在跳过“如果'并使用了存在缺陷的现有服务器列表,因此再次失败。
从网上看到我用cli测试的失败,它运行得很好。在cli中,服务器列表与Web中的列表不同。事实上,即使我的脚本在每次运行时设置它,服务器列表在每次启动脚本时都是空的。然而,它仍然存在于网络电话之间。
无论如何,在清除网络上的服务器列表并设置正确的服务器之后,它也可以从Web上按预期工作。
答案 5 :(得分:-1)
当我查看示例时,我看到它在没有命名空间“\”修饰符的情况下使用。尝试没有它吗?
http://www.php.net/manual/en/memcache.examples-overview.php
<?php
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");