Memcache& php:致命错误:找不到类'Memcache'

时间:2011-02-14 21:45:21

标签: php cakephp

我发现了几个非常相似的问题。但是,每个人都指向使用错误的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。

3 个答案:

答案 0 :(得分:4)

这个讨论已经沉默,所以我想发布我的修复(我 包裹起来)。

基本上,我停止使用我的os(mac osX 10.5.3)附带的apache / php组合并重新安装。我首先尝试homebrew,但在尝试安装wget时遇到了一堆错误,然后在尝试安装justin hileman's php formula时再次出现错误。因此,作为自制程序故障排除过程的一部分卸载了macports,我重新安装了macport并安装了所有内容。但是,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

此时一切都是小狗和彩虹。

答案 1 :(得分:3)

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);
?>

答案 2 :(得分:2)

使用:

sudo a2enmod memcache

或类似的。