繁体   English   中英

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

[英]PHP, Memcached works from command line but not from the web

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

内存缓存服务器也可以在telnet上运行。 但是,当我从Web运行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。

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

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

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

我在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()加载的配置文件在两种情况下报告了不同的值。

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

$serversList = $memcached->getServerList();

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

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

从网上看到我用cli测试过的失败,它运行得很好。 在cli中,服务器列表与Web中的列表不同。 事实上,即使我的脚本在每次运行时设置它,服务器列表在每次启动脚本时都是空的。 然而,它仍然存在于网络上的呼叫之间。

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

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

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

<?php

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM