Неустранимая ошибка PHP: класс 'MongoClient' не найден

6

У меня есть сайт, использующий Apache, который является всего лишь следующим кодом:

<?php $m = new MongoClient(); ?>

и когда я пытаюсь получить к нему доступ, я получаю ошибку в error.log

`PHP Fatal Error: Class 'MongoClient' not found`

Ниже приведены настройки, которые могут быть неправильными, но я не думаю.

php -i | grep 'Configuration' = > Configuration File (php.ini) Path => /etc/php5/cli | Loaded Configuration File => /etc/php5/cli/php.ini

grep 'mongo' /etc/php5/cli/php.ini = > extension=mongo.so

php -i | grep 'extension' = > extension_dir => /usr/lib/php5/20121212 => /usr/lib/php5/20121212

ls /usr/lib/php5/20121212/ | grep 'mongo.so' = > mongo.so

Мне не удалось найти что-либо, чтобы предложить мне установить его неправильно или неправильно настроить. Я установил его в течение последних двух часов, используя pecl и pear (sudo pear install -f pecl/mongo и sudo pecl install mongo)

Я перезапустил свой Apache и даже мой компьютер несколько раз.

Так почему я получаю ошибку Class 'MongoClient' not found?

Я на Ubuntu. PHP версия 5.5.

Изменить: я только что обнаружил, что MongoClient действителен, когда я запускаю php в интерактивном режиме. Возможно, это связано с проблемой установки пользователя/пользователя?

  • 2
    Этот вопрос использует XAMPP, которым я не являюсь, и решение оказалось проблемой с указанием .dll, тогда как я в Linux. Кроме того, все вопросы, которые дает единственный ответ, рассматриваются в моем вопросе.
  • 1
    Проверьте разрешения /usr/lib/php5/20121212/mongo.so - они должны совпадать с разрешениями других файлов в каталоге. Также вы можете запустить strace чтобы увидеть, что именно не получается, когда php пытается открыть mongo.so . Например, strace -f php test.php 2>&1 | grep 20121212
Показать ещё 1 комментарий
Теги:
apache2

2 ответа

5
Лучший ответ

Проблема заключалась в том, что я использовал php -i | grep 'Configuration' для поиска .ini файла. Это приведет к /etc/php5/cli/php.ini. Оглядываясь назад, это должно было стать очевидной подделкой: cli означает интерфейс командной строки, в основном для интерпретатора. Мне нужен был файл ini, который использовал Apache.

К сожалению, отличного способа сделать это не удалось, так как я не мог войти в пользователь www-data, но создал файл с кодом

<?php
  phpinfo();
?>

и это показало, что расположение файла .ini было фактически /etc/php5/apache2/php.ini.

Как только я обновил этот файл ini с помощью extension=mongo.so, модуль был загружен при запуске, поэтому я перезапустил и все работает сейчас.

  • 0
    Это на 100% верно. Для меня это было: "/etc/php5/fpm/php.ini"
1

Я сделал это, используя следующую последовательность

sudo apt-get install mongodb

sudo service mongodb start

mongo

sudo pecl install mongo

cd /build/buildd/php5-5.5.9+dfsg/pear-build-download

sudo tar zxvf mongo-1.6.8.tgz

cd mongo-1.6.8

sudo phpize

cd ./configure

sudo make install

sudo gedit /etc/php5/apache2/php.ini

add extension=mongo.ini inphp.ini

sudo gedit/etc/php5/apache2/conf.d/mongodb.ini

add extension=mongo.so

sudo service apache2 restart

и с помощью следующего URL

http://www.w3resource.com/mongodb/install-php-driver.php

  • 0
    Похоже, вы делаете установку дважды. 1) используя "sudo pecl install mongo". 2) с помощью «настроить, сделать установку». Во-вторых, почему вы сначала связываете расширение из php.ini с mongodb.ini, а затем добавляете расширение там?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню