php extension_loaded('memcache')是假的,但我可以清楚地看到它在服务器上运


php extension_loaded('memcache') is false, but I can clearly see it running on the server

这是我的开发服务器上的一组ps文件

498       1575  0.0  0.0 330852   152 ?        Ssl  Jun14   2:58 memcached -d -p 11211 -u memcached -m 64 -c 1024 -P /var/run/memcached/memcached.pid
498       6446  0.0  0.0 330852   152 ?        Ssl  Jul23   1:09 memcached -d -p 11212 -u memcached -m 64 -c 1024 -P /var/run/memcached-2/memcached-2.pid

所以我可以看到它在那里,我使用zend框架与'Memcached'后端,这是使用一个extension_loaded('memcache'),看看它是否被安装。

是因为他们安装了memcached2吗?但如果是这样,为什么扩展加载函数失败?我不是一个服务器迷,但我猜是在安装过程中出了什么问题?

TL;博士;

为什么extension_loaded('memcache')返回false,当memcached在服务器上运行时?

你混淆了服务器上运行的memcached服务和php扩展(Memcache和memcached),它们需要与正在运行的服务对话。

要在应用程序中使用memcached,必须安装其中一个或两个扩展。(我推荐Memcache(d)。)成功安装扩展后,在服务器上使用下面的命令检查它:

$ php -m | grep memcache

如果你有两个扩展名,输出将是:

 $ php -m | grep memcache
   memcache
   memcached

在你的情况下,Zend框架试图使用memcache扩展(不是memcached),这可能没有安装在你的机器上。

据我所知,memcache不是memcached。检查您是否正在检查正确的扩展(检查memcached)。我没有太多经验,因为我用过redis缓存。

链接:Memcache Vs. Memcached

看起来好像php模块丢失了,但是守护进程正在运行,当我运行php -m时,我没有看到memcache作为已安装的扩展,所以我需要安装它。

@mrarm那个链接确实有帮助!但是memcached的extension_loaded和memcache都返回false,显然我确实需要memcache,但它的守护进程被命名为memcached。愚蠢的命名!