Memcache & php: фатальная ошибка: класс 'Memcache' не найден в - PullRequest
4 голосов
/ 15 февраля 2011

Я обнаружил несколько очень похожих проблем.Тем не менее, каждый указывает на использование неправильного файла php.ini или на нем вообще не установлена ​​memcache, или на то, что у меня установлена ​​memcache, а не настройка memcache и т. Д., Поэтому я считаю, что эта проблема отличается, несмотря на то, что поиск этой ошибки вызывает несколько дискуссий.

В любом случае, когда я пытаюсь создать экземпляр нового объекта Memcache, я получаю:

Неустранимая ошибка: класс 'Memcache' не найден в /websites/../app/app_controller.php в строке360

Поскольку отладочные данные из командной строки иногда могут дать вам неверную информацию, я просто добавил свою отладку на страницы:

<code><pre>
  <?= system('php -i | grep "php.ini"') ?>

  <?= system('php -i | grep memcache') ?>

  <?= system('php -i | grep extension_dir') ?>

Это дает мне:

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 ]

4 голосов
/ 19 февраля 2011

Эта дискуссия затихла, поэтому я хотел опубликовать свое исправление (которое я просто завернул).

По сути, я прекратил использовать комбо apache / php, которое поставлялось с моей ОС (mac osX 10.5.3) и переустановил.Сначала я попробовал homebrew , но получал кучу ошибок при попытке установить wget, а затем снова при попытке установить php формула Джастина Хилмана .Поэтому, удалив macports как часть процесса устранения неполадок, связанных с доморощенным пивом, я переустановил macports и установил все.однако macports отстой и неправильно установил php с поддержкой mysql, поэтому я просто взял php бинарный файл Я хотел и установил старый способ, используя следующие параметры конфигурации:

--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

На данный момент все щенки и радуги.

3 голосов
/ 15 февраля 2011

Итак, модуль 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 голосов
/ 15 февраля 2011

Использование:

sudo a2enmod memcache

или аналогичное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...