【问题标题】:Class 'Memcache' not found & PHP找不到类“Memcache”和 PHP
【发布时间】:2012-08-06 16:13:56
【问题描述】:

我通过在 Windows7 上阅读 this article 安装了 memcached,但不幸的是我不断收到错误 Fatal error: Class 'Memcache' not found in D:\xampp\htdocs\test\memcache\test.php on line 2

第 2 行:$memcache = new Memcache;

Win7 64,已安装 Xampp。我在命令行上使用net start "memcached Server",但它说服务已经启动。

其他一些可能有帮助的信息;

关于 php.ini 文件:

extension=php_memcache.dll

    [Memcache]  
    memcache.allow_failover = 1  
    memcache.max_failover_attempts=20  
    memcache.chunk_size =8192  
    memcache.default_port = 11211  

更新:phpinfo();显示 dll 未加载。到目前为止尝试了几个不同的dll文件,没有工作。 dll的位置也正确。它似乎在正确的文件夹中。

(P.S. 有些人可能认为这个主题可能有重复,但 there is only 1 person 遵循相同的说明并在 SO 中出现相同的错误。自 3 月以来,该问题没有答案或解决方案。)

【问题讨论】:

  • 你在 php 扩展文件夹中有 php_memcache.dll 吗?
  • 错误不是memcached服务器,而是php配置。运行 php info 以查看 dll 是否正在加载。自配置更改以来您已重新启动服务器?要检查的另一件事是您使用的 dll 都是 64 位(我实际上运行 32 位,因为它更容易找到和正确,但只要确保它都是一个或另一个)。检查 Apache 日志中的启动错误。
  • @favoretti 我实际上将 dll 放入 php/ext 文件夹。所以它应该在那里。
  • @Robbie,它似乎不在 phpinfo 中。是的,我多次重新启动 apache 以使其在安装后工作,但没有工作。我想我安装了 64 位 dll,但会再次检查。如果现在有的话,会检查 apache 日志。那我就在这里回信。
  • 小心,memcache 不是 memcached

标签: php memcached xampp


【解决方案1】:

我找到了适用于 PHP 5.4.4 的工作 dll 文件

我不知道它们有多稳定,但它们确实可以工作。致谢this link

http://x32.elijst.nl/php_memcache-5.4-nts-vc9-x86.zip

http://x32.elijst.nl/php_memcache-5.4-vc9-x86.zip

是2.2.5.0版本,编译后才发现(对于PHP 5.4.4)。

请注意,它不是 2.2.6,但可以工作。我还将它们镜像到我自己的 FTP 中。 镜像链接:

http://mustafabugra.com/resim/php_memcache-5.4-vc9-x86.zip http://mustafabugra.com/resim/php_memcache-5.4-nts-vc9-x86.zip

【讨论】:

    【解决方案2】:

    将此添加到您的 php.ini:

    extension="php_memcache.dll"
    

    然后重启apache

    【讨论】:

    • 我赞成删除它。不过,您的确切“解决方案”已经存在问题中。
    【解决方案3】:

    Memcached 只使用标准的文本接口,因此可以在没有模块的情况下使用它。

    // connect
    $link = fsockopen($host,$port,$errno,$errst,$timeout);
    
    // set
    $data = sprintf("set %s 0 %s %s\r\n%s\r\n",
                $key,$expire,strlen($value),$value);
    fwrite($link,$data);
    $result = trim(fgets($link));
    if ($result == 'ERROR') {
        // :(
    }
    
    // get
    $data = sprintf("get %s\r\n",$key);
    fwrite($link,$data);
    $line = rtrim(fgets($link)); 
    if ($line != 'END') {
        return rtrim(fgets($link));
    }
    

    【讨论】:

      【解决方案4】:

      所以我现在正在寻找解决方案。在这里你可以下载一些编译好的扩展。

      http://downloads.php.net/pierre/

      问题是目前没有适用于 PHP 5.4 的 memcache 扩展。这就是您的扩展无法加载的问题。您需要正确的 PHP 版本和适用于 Windows 的 Tead Safe 的扩展。

      因此,如果您需要扩展,最简单的方法是使用 PHP 5.3

      memcache 的最新版本是 3.0.6,但它是 beta 版本,您可以在此处查看。

      http://pecl.php.net/package/memcache

      您可以尝试将测试版和compile 与您的 Windows 系统一起使用。但它的工作量很大。

      【讨论】:

      • 看来我的选择是;降级 PHP 或自己编译 beta 没有任何保证。顺便说一句,谢谢你指出这一点。你知道 memcacheD 是否有适用于 windows 和我的版本的扩展名吗?
      • memcache 守护进程是一个独立的程序,应该可以工作,这不是问题。守护进程未连接到 PHP 版本。并纠正这是选择。或者你可以等到版本稳定,模块可用。
      【解决方案5】:

      问题也可能是在 apache .conf 文件的某处加载另一个版本的 php 模块。需要检查重复的“LoadModule php ...”指令以及该模块是否编译为正确的 apache 版本。 听起来很简单,但当您在一台机器上有多个版本的 php 时,情况并非如此 :) 或者也可能是 SElinux 的问题。

      【讨论】:

        【解决方案6】:

        xampp windows版本是32bit,你必须使用32bit memcache.dll

        我的洞对你有用!

        【讨论】:

          猜你喜欢
          • 2017-05-24
          • 2015-08-29
          • 2011-06-27
          • 1970-01-01
          • 2011-02-09
          • 2011-11-05
          • 2014-05-29
          相关资源
          最近更新 更多