Расширение PHP (memcache|memcached) не отображается в phpinfo(), но отображается в php -m и php -i?

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

php -m

или если я использую:

php -i

но когда я использую:

$m = new Memcache;
// or
$m = new Memcache();
// or
$m = new Memcached();
//or 
$m = new Memcached;

Я получаю следующую ошибку:

Fatal error: Class 'Memcached' not found

Я работаю на Mac - OS X (10.5.7) с установкой по умолчанию apache и php. Кроме того, у меня есть memcached, работающий как демон на 127.0.0.1:11211, и libmemcache, как того требует библиотека php-memcached. Я перезапускал apache много раз и даже перезапускал машину.

Кто-нибудь знает, почему модули/расширения отображаются в командной строке, но не в моем phpinfo()? Я буквально в тупике, после 3 часов гугления я почти готов сдаться.

Также обратите внимание, что мой phpinfo() выводит мои ini-файлы следующим образом, И они оба являются одним и тем же файлом:

Configuration File (php.ini) Path:  /etc
Loaded Configuration File:  /private/etc/php.ini 

ОБНОВЛЕНИЕ:

Apache не может загрузить расширение.

[Пятница, 14 мая, 04:22:26 2010] [предупреждение] Инициализация: Кэш сеанса не настроен [подсказка: SSLSessionCache] Предупреждение PHP: Запуск PHP: невозможно загрузить динамическую библиотеку '/usr/lib/php/extensions/no-debug -non-zts-20060613/memcached.so' — (null) в Unknown on line 0 Предупреждение PHP: Запуск PHP: невозможно загрузить динамическую библиотеку '/usr/lib/php/extensions/no-debug-non-zts-20060613 /memcache.so' - (ноль) в неизвестном в строке 0

Кто-нибудь знает, почему или как это произошло? Оба упомянутых выше файла ОПРЕДЕЛЕННО ЕСТЬ. Должен ли я перенести этот вопрос на ошибку сервера?


person Auston    schedule 14.05.2010    source источник


Ответы (5)


Ваш веб-сервер, вероятно, использует mod_php, который является отдельным фрагментом кода от автономного (CLI) интерпретатора. Если они оба используют один и тот же ini-файл, а расширение memcache настроено в ini-файле, то похоже, что по какой-то причине mod_php не может загрузить расширение — проверьте error_log вашего веб-сервера на наличие ошибок запуска.

Возможно, mod_php был скомпилирован без поддержки memcache (большинство расширений должны иметь файл-заглушку, связанный с php-кодом, даже если большая часть кода не связана до времени выполнения). Или это может быть проблема с правами доступа к общему объектному файлу. Или ваш веб-сервер может запускать chroot и не может найти расширение (что также означает, что хотя ini-файлы имеют один и тот же путь, это относится к разным корням).

ХТН

C.

person symcbean    schedule 14.05.2010
comment
(или, может быть, вы не перезапустили свой веб-сервер после изменения конфигурации?) - person symcbean; 14.05.2010
comment
Не удается загрузить расширение! Спасибо! - person Auston; 14.05.2010

потому что обе версии используют разные php.ini
поместите ваш php.ini в место, указанное в выводе phpinfo()

person Your Common Sense    schedule 14.05.2010
comment
Это мой вывод phpinfo: Файл конфигурации (php.ini) Путь: /etc Загруженный файл конфигурации: /private/etc/php.ini оба одинаковы. - person Auston; 14.05.2010

Я подозреваю, что проблема связана с разрешениями. Когда вы запускаете php из командной строки, он запускается как пользователь, вызывающий его. При запуске в качестве модуля Apache он работает как «никто».

Я бы предположил, что файл memcached.so или каталог, в котором он находится, не имеет надлежащих разрешений.

person Mike Sherov    schedule 16.05.2010

Я наткнулся на этот пост, и у меня была точно такая же проблема с расширением в моем php -i, но не в phpinfo(). У меня была проблема с разрешениями из-за selinux на компьютере с CentOS. Мне пришлось изменить владельца и разрешения, и теперь он работает как положено.

person lucid311    schedule 11.08.2010

Установите путь php в переменных среды, как указано ниже. Щелкните правой кнопкой мыши вкладку «Дополнительные свойства» «Мой компьютер»> «Переменные среды» В разделе «Системные переменные» прокрутите вниз, чтобы найти «Путь», выберите и нажмите «Изменить». Добавьте путь к вашей установке php в конце (не забудьте поставить точку с запятой «;»). Пример: ";C:\php7" Нажмите "ОК".

person Mukesh Kumar    schedule 10.08.2017
comment
Похоже, это не отвечает на исходный вопрос. - person chrisis; 10.08.2017