Memcache 和 php:致命错误:在中找不到类“Memcache”
Posted
技术标签:
【中文标题】Memcache 和 php:致命错误:在中找不到类“Memcache”【英文标题】:Memcache & php: Fatal error: Class 'Memcache' not found in 【发布时间】:2011-06-27 05:26:07 【问题描述】:我发现了几个非常相似的问题。但是,每个都指向使用错误的 php.ini 文件或根本没有安装 memcache,或者安装了 memcached 而不是 memcache 设置等,所以我相信这个问题是不同的,尽管搜索该错误引发了多次讨论。
无论如何,当我尝试实例化一个新的 Memcache 对象时,我得到:
致命错误:在第 360 行的 /websites/../app/app_controller.php 中找不到类“Memcache”
因为从命令行调试的东西有时会给你错误的信息,所以我只是在页面中添加了我的调试:
<pre>
<?= system('php -i | grep "php.ini"') ?>
<?= system('php -i | grep memcache') ?>
<?= system('php -i | grep extension_dir') ?>
</pre>
这给了我:
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /private/etc/php.ini
memcache
memcache support => enabled
memcache.allow_failover => 1 => 1
memcache.chunk_size => 8192 => 8192
memcache.default_port => 11211 => 11211
memcache.default_timeout_ms => 1000 => 1000
memcache.hash_function => crc32 => crc32
memcache.hash_strategy => standard => standard
memcache.max_failover_attempts => 20 => 20
Registered save handlers => files user sqlite memcache
Registered save handlers => files user sqlite memcache
extension_dir => /usr/local/php53/modules => /usr/local/php53/modules
memcache 报告告诉我我的 php.ini 文件设置正确,memcache.so 文件在正确的位置,但这里是为了清楚起见的信息:
extension_dir = "/usr/local/php53/modules"
extension=memcache.so
还有 memcache.so:
younker % la /usr/local/php53/modules/memcache.so
-rwxr-xr-x 1 younker staff 60196 Feb 14 10:56 /usr/local/php53/modules/memcache.so
所以,我显然遗漏了一些东西,我只是不知道为什么 php 找不到类 Memcache。
【问题讨论】:
可能重复? ***.com/questions/1171313/… 既然你没有提到,你安装/启用memcache后是否重启了你的网络服务器? RE:可能重复?我看过那篇文章,问题是他们有两个不同的 php.ini 文件。一个是从 cmd 行读取的,另一个是从网站读取的。我已经验证我的 php.ini 文件是正确的;这也是为什么我直接在 cakephp 应用程序中使用我将在 cmd 行上使用的命令的原因,从而确保我看到了正确的配置信息。所以,我不认为这是一张假票。 RE:重新启动? 是的,只要进行更改,我就会重新启动服务器 RE:目录权限您具体询问的是哪个目录?我的 /usr/local/php53/modules 目录是 755,memcache.so 文件也是如此。如果您指的是另一个文件/目录,请告诉我。 【参考方案1】:用途:
sudo a2enmod memcache
或类似的。
【讨论】:
【参考方案2】:Oki,所以 memcache 模块已加载,但是包含路径呢?该错误告诉您它找不到 memcache 类,因此请查看 get_include_path 和 set_include_path 函数以及 memcache 类文件的实际位置。从外观上看,我认为您的应用程序重新设置了包含路径,但在应该保留旧路径时不保留 php.ini 的默认包含路径。像这样:
<?php
$path = '/some/app/include/path';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
?>
【讨论】:
当我第一次打印出 get_include_path() 时,路径不存在。所以我更新了我的 php.ini 文件以包含它:【参考方案3】:include_path = ".:/usr/local/php53/modules/"
然后在我调用 memcache 构造函数之前,我记录了 get_include_path 的结果:==> app/tmp/logs/debug.log <== 2011-02-15 15:20:06 Debug: .:/usr/local/php53/modules/:/websites/../<other path info>/
你可以在这里看到文件在那里,烫发没问题,它应该看到它!drwxr-xr-x 5 younker staff /usr/local/php53/modules -rwxr-xr-x 1 younker staff /usr/local/php53/modules/memcache.so
这个讨论已经静默,所以我想发布我的修复(我刚刚结束了)。
基本上,我停止使用我的操作系统(mac osX 10.5.3)附带的 apache/php 组合并重新安装。我首先尝试了homebrew,但在尝试安装 wget 时遇到了一堆错误,然后在尝试安装justin hileman's php formula 时又遇到了错误。因此,作为自制程序故障排除过程的一部分,我卸载了 macports,我重新安装了 macports 并安装了所有东西。但是,macports 很糟糕,并且没有正确安装支持 mysql 的 php,所以我只是抓住了我想要的 php binary 并使用以下配置选项安装了旧时尚方式:
--prefix=/opt/local --with-mysql=/usr/local/mysql --enable-memcache --mandir=/opt/local/share/man --infodir=/opt/local/share/info --with-config-file-path=/opt/local/etc/php5 --with-config-file-scan-dir=/opt/local/var/db/php5 --disable-all --enable-bcmath --enable-ctype --enable-dom --enable-fileinfo --enable-filter --enable-hash --enable-json --enable-libxml --enable-pdo --enable-phar --enable-session --enable-simplexml --enable-tokenizer --enable-xml --enable-xmlreader --enable-xmlwriter --with-bz2=/opt/local --with-mhash=/opt/local --with-pcre-regex=/opt/local --with-readline=/opt/local --with-libxml-dir=/opt/local --with-zlib=/opt/local --disable-cgi --with-apxs2=/opt/local/apache2/bin/apxs --with-pear=/opt/local/lib/php --with-openssl=/opt/local
此时一切都是小狗和彩虹。
【讨论】:
以上是关于Memcache 和 php:致命错误:在中找不到类“Memcache”的主要内容,如果未能解决你的问题,请参考以下文章
致命错误:在 Zend Framework + Wamp 中找不到类“Memcache”
PHP memcached 致命错误:找不到类“Memcache”