找不到类“Memcache”和 PHP

Posted

技术标签:

【中文标题】找不到类“Memcache”和 PHP【英文标题】:Class 'Memcache' not found & 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 【参考方案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

我的洞对你有用!

【讨论】:

以上是关于找不到类“Memcache”和 PHP的主要内容,如果未能解决你的问题,请参考以下文章

PHP memcached 致命错误:找不到类“Memcache”

致命错误:在 Zend Framework + Wamp 中找不到类“Memcache”

在 Laravel Elastic Beanstalk 应用程序中找不到类“Memcached”

扩展类异常时出现PHP“找不到类”错误

找不到“mysqli”类

“PHP 致命错误:找不到类 'HttpRequest'”