2014-11-19 5 views
5

Ich habe ein großes Problem mit meiner Entwicklungsumgebung.MongoDB auf Wamp x64 (win x64) = mongo.native_long Fehler

Kontext:
Mein Computer: Win 8.1 x64
Mein WampServer installieren: x64
Mein MongoDB installieren: x64 von http://www.mongodb.org/downloads

ich die PHP-Erweiterung von http://pecl.php.net/package/mongo installiert haben.

Mein Problem ist, dass unser Produktionsserver einige 64 Bits INT in der Datenbank speichert.

Wenn ich versuche, in meiner Entwicklungsumgebung, auf diese Daten zuzugreifen, ich habe:

MongoCursorException

Cannot natively represent the long 1108547148863410176 on this platform

ich im Internet gefunden, dass ein Parameter von mongoDB genannt „mongo.native_long = 1“ ist erforderlich 64 Bits INT auf 64 Bits Architektur zu verwenden.
Aber wenn ich versuche diese param in meinem „php.ini“ Datei hinzufügen, wird der Server nicht gestartet, und geben Sie mir einen Fehler wie:

[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

meine Hat mongoDB Erweiterungs-DLL auf 32 Bit wird bauen oder Ich habe etwas zu tun verpasst?

+0

Dann nehme ich an, dass Ihre Entwicklungsumgebung ein 32-Bit-System ist. Entweder Windows und damit WAMPServer ist 32bit oder Sie haben den 32bit WAMPServer auf einem 64bit Betriebssystem installiert.Denken Sie daran, dass Sie WAMPserver 64bit nicht auf einem 32-Bit-Betriebssystem installieren können. – RiggsFolly

+0

Wie ich am Anfang des Threads schrieb, ist mein Betriebssystem Win 8.1 x64, also bin ich auf einer 64 Bit Windows-Version mit einer 64-Bit-Version von WampServer:/ – Eirika

+0

Sind Sie sicher. Tun Sie dies, um sicherzugehen. Starten Sie die Befehlsfenster, CD in den Ordner "\ wamp \ bin \ apache \ apache2.4.9 \ bin" und führen Sie "httpd -V" aus. Suchen Sie in der Ausgabe nach der Zeile "Architecture". – RiggsFolly

Antwort

5

Für mich ist das einzige, was arbeitete, war:

ini_set('mongo.long_as_object', 1); 

Hoffe, dass es jemand Zeit spart. Es ist eines dieser dummen Dinge, die dich wundern: "Warum zur Hölle wurde ich ein Programmierer?"

EDIT:richtige Treiber von http://pecl.php.net/package/mongo bekommen hat mir geholfen. Ich habe den neuesten Treiber heruntergeladen. Überprüfen Sie Ihre Version mit dem Befehl phpinfo(). Z.B. für mich, auf 64-Bit Win7 ist es:

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

Beachten Sie die "TS, VC11" string. Es bedeutet Thread Safe, aber Ihre Version ist möglicherweise nicht Thread-sicher (NTS).

Also habe ich 64bit, TS für PHP 5.5 heruntergeladen. Ich habe lange mit diesem Problem zu tun gehabt und schließlich hat ein richtiger Treiber dieses Problem gelöst.

+0

half mir auf LAMPP in Linux-Umgebung, Tnx. – sepehr

+1

Ja, das ist eine große Sache. Freut mich, dass es dir geholfen hat, ohne dass der richtige Fahrer mit Mongo arbeiten kann. – Rav

2

Wenn eine 32-Bit-Apache-Konsole (wie wampp oder xampp) u sollten fügen Sie folgendes zu Ihrer php.ini:

mongo.long_as_object= 1 

Die obige Linie sollte alle longs Objekt umwandeln, auf diese Weise die Ausnahme wird nicht auftreten.

Hoffe das hilft allen 32-Bit-Benutzer, die dieses Problem haben.