【问题标题】:Fatal error: Class 'Memcache' not found (installed with pecl)致命错误:找不到类“Memcache”(与 pecl 一起安装)
【发布时间】:2012-06-02 03:56:20
【问题描述】:

我通过 ssh 安装了 memcache,其中:

$ pecl install memcache

这是输出:https://pastee.org/w63sy

并将这一行添加到etc/php.ini

extension=memcache.so

当尝试初始化时:

/* MEMCACHE */
$memcache = new Memcache();
$memcache->pconnect('localhost',11211);

我明白了:

Fatal error: Class 'Memcache' not found in /home/piscolab/public_html/website.com/includes/sql.php on line 25

我做错了什么?

我发现了这个问题,但问题在于他的共享服务器。我在 VPS 下。

跑步:php -i | grep php.ini

[root@vps ~]# php -i | grep php.ini                                                                                                                                            
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/memcache.so' - /usr/lib/php/modules/memcache.so: cannot open shared object file: No such file o
r directory in Unknown on line 0                                                                                                                                               
Configuration File (php.ini) Path => /etc                                                                                                                                      
Loaded Configuration File => /etc/php.ini                                                                                                                                      
[root@vps ~]#    

查找 memcache.so(无输出)

[root@vps ~]# find / -type f -name memcache*.so'                                                                                                                              
[root@vps ~]# find / -type f -name memcache*.so                                                                                                                                
[root@vps ~]#

【问题讨论】:

  • 在将那行添加到配置后是否重新启动了 Apache?
  • 否定!我马上试试。谢谢!
  • 我重新启动了虚拟机,但没有任何改变 @DCoder 和 /etc/init.d/apache2 restart 记录我不是这样的文件或目录:S
  • 这个错误意味着你的memcache.so 不是/usr/lib/php/ 中的not - 你可以试试find /usr/ -name memcache.so 看看它在哪里。
  • @DCoder 那怎么办? 'find /myusername/ -name memcache.so' ??

标签: php apache memcached pecl


【解决方案1】:

鉴于错误消息的输出,您似乎缺少 zlib 开发库,或者至少它们不在可通过 configure 自动找到的通常位置。

由于您使用的是 CentOS,请尝试使用以下命令安装库:

yum install zlib-devel

这会安装 memcache 所需的 zlib 库。安装 zlib 库后尝试重新运行 pecl 安装程序。

【讨论】:

    【解决方案2】:

    如果您通过 phpinfo() 或 php_config 提供更多信息可能会有所帮助,更具体地说,您的安装是否看到了 memcache 库以及您的库路径是否正确。

    php-config
    

    会告诉你更多,这里有趣的是使用的 php ini 路径和 lib 路径 当您使用--configure-options,子选项--with-config-file-path(在我的特定情况下是/etc/php5/apache2)时,将显示php ini路径 并且库路径将显示为 --extension-dir

    例如

    php-config --extension-dir
    
    php-config --configure-options | grep -o 'with-config-file-path[^ ,.]*' | grep -o '[^=.]*$'
    

    所以要使用我的示例,我的 lib 路径设置为

    /usr/lib/php5/20090626+lfs 和一个

    ls /usr/lib/php5/20090626+lfs/mem*  
    

    我的系统命令显示:

    /usr/lib/php5/20090626+lfs/memcached.so

    我的 php.ini 文件位于 /etc/php5/apache2/php.ini

    phpinfo() php 函数(只需放在一个文件中并查看它)还显示 memcache 支持并加载了“memcached support enabled”(我专门使用了 memcached 扩展,而不是 memcache)

    请注意,您的网络服务器可能配置为使用与命令行不同的 php.ini 路径(因此文件),因此请验证两者。还要确保将 extension=memcache.so 放置在正确的位置,因为许多发行版将其放置在 /etc/php5/conf.d/memcache.ini 中可能存在一些差异?

    【讨论】:

    • 哇!伙计,谢谢你的回答,但我有点迷路了..我会运行你发布的 ssh 命令并让你知道。但你基本上是说我的 php.ini 不是 apache 使用的那个?
    • 这可能是您的问题的一个可能的答案,是的
    • 请检查我的编辑。似乎这是正确的 php.ini 路径,但显示了一些错误,你明白吗?
    • 就像 Dcoder 在上面的评论中说的:找不到你的 memcache.so 库文件,因此没有加载,检查它是否存在(作为 root 或在命令之前使用 sudo)find / -type f -name 'memcache*.so' 如果此命令找不到它,那么您没有正确安装库文件,您需要(重新)安装 memcache php 模块。请注意,这会搜索您的整个磁盘,因此需要一段时间才能返回给您答案,这是一种暴力方式,抱歉。 :)
    • 如果您确实可以通过这种方式找到 memcache.so,那么毫无疑问您的 php 看不到一个目录,然后您需要将该路径添加到 PHP 扩展的路径中。
    猜你喜欢
    • 2011-11-05
    • 2010-12-26
    • 2011-06-27
    • 2011-02-09
    • 2012-04-14
    • 2012-09-22
    • 2019-05-01
    相关资源
    最近更新 更多