PHP,Memcached可以从命令行运行,但不能从Web运行

时间:2013-04-23 01:31:06

标签: php apache memcached

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

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

6 个答案:

答案 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");