2015-02-05 14 views
6

gefunden Ich habe eine Seite Apache verwenden, die nur der folgende Code:PHP Fatal Error: Klasse ‚MongoClient‘ nicht

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

und wenn ich versuche, darauf zuzugreifen, erhalte ich den Fehler in error.log

Die folgenden Einstellungen sind möglicherweise falsch, aber ich glaube nicht.

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

Ich habe nicht in der Lage, etwas zu finden ich vorschlagen installiert es ist falsch oder falsch konfiguriert. Ich installierte es in den letzten zwei Stunden unter Verwendung von pecl und pear (sudo pear install -f pecl/mongo und sudo pecl install mongo)

Ich habe meine Apache neu gestartet und sogar mehrmals meinem Computer.

Warum bekomme ich den Fehler Class 'MongoClient' not found?

Ich bin auf Ubuntu. PHP-Version 5.5.

Edit: Ich habe gerade entdeckt, dass MongoClient gültig ist, wenn ich PHP im interaktiven Modus ausführen. Vielleicht hat es mit einem Benutzererlaubnis/Benutzerinstallationsproblem zu tun?

+2

Diese Frage XAMPP benutzt, was ich nicht bin, und die Lösung endete als ein Problem mit der Angabe einer .dll, während ich unter Linux bin. Außerdem wird alles, was die einzige Antwort bringt, in meiner Frage angesprochen. –

+1

Überprüfen Sie die Berechtigungen von '/ usr/lib/php5/20121212/mongo.so' - sie sollten mit den Berechtigungen der anderen Dateien im Verzeichnis identisch sein. Außerdem können Sie 'strace' ausführen, um zu sehen, was genau fehlschlägt, wenn' php' versucht, 'mongo.so' zu öffnen. Z.B. 'strace -f php test.php 2> & 1 | grep 20121212' – VolenD

+0

@ user3584460 Danke für die Antwort. Die Berechtigungen waren im Grunde die gleichen (664 statt 644), aber ich änderte sie auf genau das gleiche und es gibt kein Problem. Wie für den zweiten Teil scheint es kein Problem zu geben, weil es funktioniert, wenn ich es wie ich selbst betreibe. Ich denke, ich habe die Frage etwas verwirrend gemacht, da ich nicht angegeben habe, dass dies ein Problem ist, wenn Apache (Benutzer www-data) PHP ausführt, nicht wenn ich es bin. –

Antwort

5

Das Problem war, dass ich php -i | grep 'Configuration' verwendet, um die INI-Datei zu finden. Dies führt zu /etc/php5/cli/php.ini. Im Nachhinein sollte dies ein offensichtlicher Werbegeschenk gewesen sein: cli bedeutet Befehlszeilenschnittstelle, im Grunde für den Interpreter. Was ich brauchte, war die Ini-Datei, die Apache verwendete.

Leider gab es keine gute Möglichkeit, dies zu tun, da ich nicht in den www-data Benutzer anmelden kann, aber ich habe eine Datei, die den Code

<?php 
    phpinfo(); 
?> 

hatte und dass zeigte, dass die INI-Datei Standort war eigentlich /etc/php5/apache2/php.ini.

Sobald ich aktualisiert, dass Ini-Datei mit extension=mongo.so, wurde das Modul beim Start geladen, so dass ich neu gestartet und alles funktioniert jetzt.

+0

Das ist 100% wahr. Für mich war es: "/etc/php5/fpm/php.ini" – Rav

1

ich getan habe es folgende Sequenz mit

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 

und mit Hilfe von folgenden URL

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

+0

Das sieht aus wie Sie die Installation zweimal machen. 1) mit "sudo pecl install mongo". 2) mit "configure, make install". Zweitens, warum verbinden Sie zuerst die Erweiterung von php.ini zu mongodb.ini und fügen Sie dann die Erweiterung dort? –

Verwandte Themen