2014-07-02 13 views
24

Sto cercando di rendere questo codice run:Class 'MongoClient' non trovato

<?php 

$m = new MongoClient("mongodb://54.72.237.242"); 
$db = $m->tilbud; 

?> 

Ogni volta che ho ottenuto lo stesso errore:

Fatal error: Class 'MongoClient' not found in C:\xampp\htdocs\conexion.php 

Ho letto su questo problema l'intero giorno ma tutto risolve il mio problema (immagino sia qualcosa che sto sbagliando).

Ho scaricato il file php_mongo.dll, l'ho copiato in xampp/php/ext e ho aggiunto extension=php_mongo.dll nell'archivio php.ini.

ho aggiunto 4 altre dll perché non sono sicuro che uno devo usare:

  • extension=php_mongo-1.5.4-5.5-vc11-nts
  • extension=php_mongo-1.5.4-5.5-vc11
  • extension=php_mongo-1.5.4-5.5-vc11-nts-x86_64
  • extension=php_mongo-1.5.4-5.5-vc11-x86_64

Così ora sto ricevendo 5 avvisi invece di uno. Alla fine Credo che uno di loro sarà lavorare e io eliminano gli altri 4.

cose che ho provato e sono sicuro che sono ok:

  • L'extension_dir punta alla cartella corretta.
  • Il file php.ini che ho modificato è quello caricato da xammp.
  • Phpinfo non mostra nulla di mongo.

Cos'altro posso provare?

Modifica

ho cercato

echo extension_loaded("mongo") ? "loaded\n" : "not loaded\n";

e dice sempre 'non caricato'.

Modifica

Finalmente! Il problema era il nome della DLL. Deve essere 'php_mongo.dll' e stavo cercando di caricare il nome completo dll come ho detto all'inizio di questo post. Così ho cambiato la DLL corretta per me (extension=php_mongo-1.5.4-5.5-vc11) per extension=php_mongo.dll e voilà!

+0

Scaricare la DLL non è sufficiente. Segui le istruzioni di installazione qui: http://php.net/manual/en/mongo.installation.php –

+0

Grazie, ma ho seguito già queste istruzioni. –

risposta

37

Non è stato installato il driver MongoDB PHP consultare questo link http://www.php.net/manual/en/mongo.installation.php

fonti Aggiornamento

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list 
sudo apt-get update 

installare MongoDB PHP driver

sudo apt-get install php5-dev php5-cli php-pear -y 
sudo pecl install mongo 

Aprire il php.file ini e aggiungere ad essa:

extension=mongo.so 

Riavviare apache

sudo /etc/init.d/apache2 restart 

Altro su aiutare:

questo dovrebbe aiutare a trovare il file php.ini:

php -i | grep 'Configuration File' 

Su Ubuntu mostra questo:

Configuration File (php.ini) Path => /etc/php5/cli 
Loaded Configuration File => /etc/php5/cli/php.ini 

prendere una nota, che si esegue questo comando da CLI (command line) così per i tuoi veri php.ini Vai alla cartella apache2 invece di cli :)

+2

Usa 'printf" \ n "| pecl install mongo' se è necessario integrarlo in uno script di installazione. – czerasz

+5

Nella domanda originale c'è un riferimento a 'C: \ xampp \ htdocs' che indica che stanno usando Windows, e quindi nessuno di questi comandi li aiuterà affatto. –

+1

buon punto nevada_scount, grazie. Spero che la mia risposta sarà ancora utile a tutti coloro che usano Linux. –

2

Da this pagina:

Nota: ulteriori dipendenze DLL di Windows per gli utenti:

Affinché questa estensione al lavoro, ci sono file DLL che devono essere disponibili al percorso di sistema di Windows

3

Ottenere lo stesso errore e ora è risolto.
Sto usando Linux Mint. Per risolvere questo problema ho aggiunto extension=mongo.so in due directory:

  • /etc/php5/cli/php.ini
  • /etc/php5/apache2/php.ini
0

vostra versione di PHP e la versione del file dll dovrebbe essere la stessa controllare se le versioni non sono uguali quindi aggiornare il php xampp in base alla versione dll disponibile.

21

Per chi arriva in questa pagina con PHP 7 installato:

La classe MongoCLient sono state fornite dal pecl install mongo. Ma pecl/mongo non è disponibile per php7 e obsoleto a favore di pecl/mongodb. Ma con pecl/mongodb dovrai utilizzare MongoDB\Driver\Manager anziché MongoClient (l'avviso nella pagina lo dice anche tu).

Vedere here per ulteriori informazioni.

Detto questo, è necessario un livello di astrazione su PHP MongoDB\Driver\Manager. Questo è fornito da mongodb/mongo-php-library.

Avrete bisogno di refactoring cose del genere:

  • \MongoClient a \MongoDB\Client
  • \MongoCollection-\MongoDB\Collection
  • \MongoClient->selectDB-\MongoDB\Client->selectDatabase
  • \MongoClient->listDBs a \MongoDB\Client->listDatabases
    • anche di uscita non è una matrice, ma un iteratore, quindi avrai bisogno di usare iterator_to_array, insieme con le modifiche al modo in cui si utilizza l'oggetto risultante
  • \MongoCollection->getName a \MongoDB\Collection->getCollectionName
  • \MongoCollection->update-\MongoDB\Collection->updateOne o updateMany
  • \MongoCollection->remove-\MongoDB\Collection->deleteOne
  • \MongoCollection->batchInsert a \MongoDB\Collection->insertMany
+7

perché ci stanno facendo refactoring di tutto? Così triste – inorganik

+1

Puoi anche usare questo plugin sopra php mongodb client per usare i vecchi metodi e le classi sul nuovo driver: https://github.com/alcaeus/mongo-php-adapter – razzbee

+0

@razzbee brutto, ma aiuta, grazie –

0

installa il driver, ho per esempio php5.6:

sudo apt-get install php5.6-mongo 
+0

+1 a questa risposta, ma mi aiuta, perché ho aggiunto prima questo repository https://launchpad.net/~ondrej/+archive/ubuntu/php – montie

2

La risposta è infatti seguire le istruzioni. mi mancava molto importante linea di richiedere che deve venire prima di creare il nuovo oggetto MongoDB:

<?php 

require 'vendor/autoload.php'; 

$client = new MongoDB\Client("mongodb://localhost:27017"); 

E, naturalmente, è necessario eseguire il comando nella root del vostro progetto secondo le istruzioni:

composer require mongodb/mongodb 
Problemi correlati