Я получаю оба модуля, перечисленные, как установлено / настроенный, когда я использую:
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) с установкой по умолчанию апача и php. Кроме того, у меня есть memcached, работающий как демон на 127.0.0.1:11211 и libmemcache как требуется php-memcached библиотекой. Я перезапустил апачские тонны времен и даже сделал перезапуск машины.
Кто-либо знает, почему модули/расширения обнаруживаются в командной строке, но не в моем phpinfo ()? Я буквально озадачен, после 3 часов поиска с помощью Google я примерно готов сдаться.
Кроме того, отметьте, мой phpinfo () производит мои ini файлы следующим образом, И они - оба тот же самый файл:
Configuration File (php.ini) Path: /etc
Loaded Configuration File: /private/etc/php.ini
ОБНОВЛЕНИЕ:
Apache не удается загрузить расширение.
[Пятница 14 мая 4:22:26 2010] [предупреждает] Init: Кэш Сессии не настроен [подсказка: SSLSessionCache] Предупреждение PHP: Запуск PHP: Не мог загрузить динамическую библиотеку '/usr/lib/php/extensions/no-debug-non-zts-20060613/memcached.so' - (пустой указатель) в Неизвестном на строке 0 Предупреждений PHP: Запуск PHP: Не мог загрузить динамическую библиотеку '/usr/lib/php/extensions/no-debug-non-zts-20060613/memcache.so' - (пустой указатель) в Неизвестном на строке 0
Кто-либо знает, почему или как это произошло бы? Оба из файлов, на которые ссылаются выше ОПРЕДЕЛЕННО, там. Я должен переместить этот вопрос отказу сервера?
Я подозреваю, что проблема связана с разрешениями. Когда вы запускаете php из командной строки, он запускается от имени вызывающего его пользователя. Когда он запускается как модуль apache, он запускается как «никто».
Я предполагаю, что файл memcached.so или каталог, в котором он находится, не имеют надлежащих разрешений.
поскольку обе версии используют разные php.ini
, поместите ваш php.ini в место, указанное в выходном файле phpinfo ()
Ваш веб-сервер, вероятно, использует mod_php, который представляет собой отдельный фрагмент кода от автономного интерпретатора (CLI). Если они оба используют один и тот же ini-файл, а расширение memcache настроено в ini-файле, то это звучит так, как будто по какой-то причине mod_php не загружает расширение - проверьте error_log вашего веб-сервера на наличие ошибок запуска.
Возможно, что mod_php был скомпилирован без поддержки memcache (большинство расширений должны иметь файл-заглушку, связанный с кодом php, хотя основная часть кода не связана до времени выполнения). Или это может быть проблема с разрешениями для общего объектного файла. Или ваш веб-сервер может работать под управлением chroot и не может найти расширение (что также означает, что, хотя файлы ini имеют одинаковый путь, это относительно разных корней).
HTH
C.