我在使用时将两个模块列为已安装/配置:
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行的未知中
有谁知道为什么或如何发生这种情况?上面引用的两个文件都在那里。我应该将此问题移至服务器故障吗?
答案 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" 单击“确定”。