2014-11-19 10 views
5

Ho un grosso problema con il mio ambiente di sviluppo.MongoDB su Wamp x64 (win x64) = errore mongo.native_long

Contesto:
Il mio computer: Win 8.1 x64
mio WampServer installare: x64
mio MongoDB installare: x64 da http://www.mongodb.org/downloads

Ho installato l'estensione PHP da http://pecl.php.net/package/mongo.

Il mio problema è che il nostro server di produzione memorizza alcuni INT di 64 bit nel database.

Quando provo, nel mio ambiente di sviluppo, per accedere a questi dati, ho:

MongoCursorException

Cannot natively represent the long 1108547148863410176 on this platform

ho trovato su internet che un parametro di MongoDB chiamato "mongo.native_long = 1" è necessaria utilizzare l'INT a 64 bit su architettura a 64 bit.
Ma quando provo ad aggiungere questo parametro nel mio file "php.ini", il server non si avvia e mi danno un errore come:

[19-Nov-2014 18:25:52 UTC] PHP Fatal error: PHP Startup: To prevent data corruption, you are not allowed to turn on the mongo.native_long setting on 32-bit platforms in Unknown on line 0

La mia estensione DLL MongoDB è costruita su 32 bit o Mi sono perso qualcosa da fare?

+0

Quindi presumo che il tuo ambiente di sviluppo sia un sistema a 32 bit. Sia Windows che WAMPServer sono a 32 bit oppure il server WAMPS a 32 bit è installato su un sistema operativo a 64 bit.Ricordare che non è possibile installare WAMPserver 64bit su un sistema operativo a 32 bit. – RiggsFolly

+0

Come ho scritto all'inizio del thread, il mio sistema operativo è Windows 8.1 x64 quindi sono su una versione di Windows 64 Bits con una versione a 64 bit di WampServer:/ – Eirika

+0

Sei sicuro. Fallo per essere sicuro. Avvia il comando windows, CD nella cartella '\ wamp \ bin \ apache \ apache2.4.9 \ bin' ed esegui' httpd -V'. Cerca nell'output la riga che inizia con 'Architecture'. – RiggsFolly

risposta

5

Per me l'unica cosa che ha funzionato è stato:

ini_set('mongo.long_as_object', 1); 

Spero che consente di risparmiare tempo di qualcuno. È una di quelle cose stupide che ti fanno pensare: "Perché diavolo sono diventato un programmatore?"

EDIT: ottenere corretta conducente da http://pecl.php.net/package/mongo mi ha aiutato. Ho scaricato il driver più recente. Controlla la tua versione usando il comando phpinfo(). Per esempio. per me, su Win7 a 64 bit è:

PHP Version 5.5.12 
PHP Extension Build: API20121212,TS,VC11 

Si noti la stringa "TS, VC11". Significa che è sicuro per i thread, ma la tua versione potrebbe non essere thread-safe (NTS).

Così ho scaricato 64bit, TS per PHP 5.5. Avevo a che fare con questo problema da molto tempo e, infine, il driver corretto ha risolto questo problema.

+0

questo mi ha aiutato su lampp in ambiente Linux, tnx. – sepehr

+1

Sì, questa è una grande cosa. Sono contento che ti abbia aiutato, senza un autista adatto a lavorare con mongo può essere un incubo. – Rav

2

Quando si utilizza una console Apache a 32 bit (come WAMPP o XAMPP) u dovrebbe aggiungere il seguente al file php.ini:

mongo.long_as_object= 1 

La linea di cui sopra dovrebbe convertire tutti anela di opporsi, in questo modo l'eccezione non succederà.

Spero che questo aiuti tutti gli utenti a 32 bit che hanno questo problema.

Problemi correlati