11

我在 Centos 6.4 上安装了带有memcached.so扩展名的 PHP 5.3.3,并且 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)

没有重新安装我的操作系统并尝试不同版本的废话,任何人都可以解释可能导致此问题的原因吗?

4

6 回答 6

2

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

  • getenforce了解您是否启用了 SELinux
  • setenforce 0禁用它
  • reboot
  • 重试您的测试

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

于 2013-04-25T12:35:00.333 回答
2

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

# setsebool -P httpd_can_network_memcache 1
# getsebool httpd_can_network_memcache
httpd_can_network_memcache --> on
于 2015-07-28T09:34:52.373 回答
0

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

于 2013-04-27T09:37:56.647 回答
0

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

将 extension=php_memcache.dll 放在正确的 .ini 文件中可以解决问题。

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

于 2013-12-11T23:50:41.257 回答
0

我遇到了与 OP 描述的完全相同的问题。事实证明,问题是由 memcached 扩展在内部维护的服务器列表引起的。我的代码是这样的:

$serversList = $memcached->getServerList();

if (empty($serversList)) {
     $memcached->addServer($host, $port);
}

我对测试脚本的初始调用是使用错误的 $port 值完成的。调用是从 web (apache) 而不是 cli 完成的。在我更正端口并再次运行代码后,它跳过了“if”并使用了存在缺陷的现有服务器列表,因此再次失败。

从网上看到我用 cli 测试的失败,它工作得很好。在 cli 中的服务器列表与 web 中的不同。事实上,服务器列表在脚本每次启动时都是空的,即使我的脚本在每次运行时都设置了它。然而,它在网络上的通话之间持续存在。

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

于 2015-07-27T18:50:40.070 回答
-1

当我查看示例时,我发现它在没有命名空间“\”修饰符的情况下使用。试试没有它可能吗?

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

<?php

$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");
于 2013-05-02T13:42:10.320 回答