У меня есть сайт, использующий 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 в интерактивном режиме. Возможно, это связано с проблемой установки пользователя/пользователя?
Проблема заключалась в том, что я использовал 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
, модуль был загружен при запуске, поэтому я перезапустил и все работает сейчас.
Я сделал это, используя следующую последовательность
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
/usr/lib/php5/20121212/mongo.so
- они должны совпадать с разрешениями других файлов в каталоге. Также вы можете запуститьstrace
чтобы увидеть, что именно не получается, когдаphp
пытается открытьmongo.so
. Например,strace -f php test.php 2>&1 | grep 20121212