PHP扩展(memcache | memcached)没有在phpinfo()中显示但在php -m和php -i中显示?

时间:2010-05-14 07:02:27

标签: php memcached

我在使用时将两个模块列为已安装/配置:

php -m

或者如果我使用:

php -i

但是当我使用时:

$m = new Memcache;
// or
$m = new Memcache();
// or
$m = new Memcached();
//or 
$m = new Memcached;

我收到以下错误:

Fatal error: Class 'Memcached' not found

我在Mac-OS X(10.5.7)上运行,默认安装apache& PHP。另外,我根据php-memcached库的要求在127.0.0.1:11211和libmemcache上运行memcached作为守护进程运行。我已经重启apache很多次,甚至重启机器。

有谁知道为什么模块/扩展会出现在命令行中而不是出现在我的phpinfo()中?我真的很难过,经过3个小时的谷歌搜索,我准备放弃了。

另外,请注意,我的phpinfo()按如下方式输出我的ini文件,它们都是完全相同的文件:

Configuration File (php.ini) Path:  /etc
Loaded Configuration File:  /private/etc/php.ini 

更新

Apache无法加载扩展程序。

  

[2010年5月14日星期五04:22:26] [警告]   Init:未配置会话缓存   [提示:SSLSessionCache] PHP警告:   PHP启动:无法加载动态   图书馆   '/usr/lib/php/extensions/no-debug-non-zts-20060613/memcached.so'    - (null)在第0行的Unknown中PHP警告:PHP启动:无法加载   动态库   '/usr/lib/php/extensions/no-debug-non-zts-20060613/memcache.so'    - (null)在第0行的未知中

有谁知道为什么或如何发生这种情况?上面引用的两个文件都在那里。我应该将此问题移至服务器故障吗?

5 个答案:

答案 0 :(得分:4)

您的网络服务器可能正在使用mod_php,它是独立(CLI)解释器的单独代码。如果他们都使用相同的ini文件,并且在ini文件中配置了memcache扩展,那么听起来因为某些原因,mod_php无法加载扩展 - 检查你的webserver error_log是否有启动错误。

可能是mod_php是在没有memcache支持的情况下编译的(大多数扩展需要将一个存根文件链接到php代码中,即使大部分代码在运行时都没有链接)。或者它可能是共享对象文件上的权限问题。或者您的网络服务器可能正在运行chroot,并且无法找到扩展名(这也意味着尽管ini文件似乎具有相同的路径,但这与不同的根相对)。

HTH

下进行。

答案 1 :(得分:3)

因为两个版本都使用不同的php.ini
将您的php.ini放入phpinfo()outout

中注明的位置

答案 2 :(得分:2)

我怀疑这个问题围绕着权限。当您从命令行运行php时,它将以用户调用它的方式运行。当作为apache模块运行时,它以“nobody”运行。

我认为memcached.so文件或它所在的目录没有适当的权限。

答案 3 :(得分:1)

我对这篇文章感到困惑,并且在我的 php -i 中的扩展程序遇到了完全相同的问题,但在phpinfo()中却没有。由于 CentOS 计算机上的 selinux ,我的权限问题。我不得不更改所有权和权限,现在它按预期工作。

答案 4 :(得分:-2)

在环境变量中设置php路径,如下所示。 右键单击"我的电脑" 属性 高级选项卡>环境变量 在系统变量下,向下滚动以找到"路径",选择并单击编辑。 最后添加到php安装的路径(确保在分号前面加上#34 ;;")。示例:&#34 ;; C:\ php7" 单击“确定”。