PHP,Memcached从命令行工作,但不是从networking

我在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) 

没有重新安装我的操作系统和尝试不同版本的废话,任何人都可以解释什么可能会导致这个问题?

这是一个SELinux问题? Cli可以访问Memcached,但守护进程没有。 尝试这个 :

  • getenforce知道你是否启用了SELinux
  • setenforce 0将其禁用
  • reboot
  • 重试你的测试

如果是好的,您必须配置Apache才能访问Memcached。

请确保您的memcache服务应绑定所有IP。 默认值是127.0.0.1。 将其更改为0.0.0.0以支持所有定义的Ips。 另外,不要忘记控制你的iptables或防火墙。

当我看例子时,我发现它没有使用名称空间“\”修饰符。 尝试没有它可能吗?

http://www.php.net/manual/en/memcache.examples-overview.php

 <?php $memcache = new Memcache; $memcache->connect('localhost', 11211) or die ("Could not connect"); 

我在WAMP 2.4中遇到了这个问题,运行一个简单的Memcache测试脚本,但是不能在浏览器中运行。

答案结果是惊人的世俗:WAMP有两个php.ini文件,我正在编辑错误的。

例如Apache使用这个:c:\ wamp \ bin \ apache \ Apache2.4.4 \ bin \ php.ini WAMP也有这个:c:\ wamp \ bin \ php \ php5.4.12 \ php.ini

将扩展名= php_memcache.dll放在正确的.ini文件中。

我的线索是这样的,问题是phpInfo()的加载配置文件在两种情况下报告不同的值。

我有与OP所述完全相同的问题。 原来,问题是由memcached扩展在内部维护的服务器列表引起的。 我的代码是这样的:

 $serversList = $memcached->getserverList(); if (empty($serversList)) { $memcached->addserver($host, $port); } 

我对测试脚本的初始调用是使用$ port的错误值完成的。 这个调用是从web(apache)而不是从cli完成的。 在我纠正了端口后,我再次运行代码,它跳过了“如果”,并使用现有的服务器列表有瑕疵,所以它再次失败。

看到网络上的失败,我用cli测试过,而且工作完美。 服务器列表与网络中的服务器列表不同。 实际上,每次启动脚本时,服务器列表都是空的,即使脚本在每次运行时都设置了它。 然而,它坚持在网络上的呼叫。

无论如何,在清除网络上的服务器列表并设置正确的服务器之后,它也可以按照网络上的预期工作。

我在CentOS上有类似的问题,我发现它运行的SELinux阻止httpd连接到memcached。 你需要在下面设置,

 # setsebool -P httpd_can_network_memcache 1 # getsebool httpd_can_network_memcache httpd_can_network_memcache --> on