MongoDB на Wamp x64 (win x64) = ошибка mongo.native_long

У меня большая проблема с моей средой разработки.

Контекст:
Мой компьютер: Win 8.1 x64
Мой WampServer устанавливает: x64
Мой MongoDB установить: x64 от http://www.mongodb.org/downloads

Я установил расширение PHP от http://pecl.php.net/package/mongo.

Моя проблема в том, что наш производственный сервер хранит в базе данных около 64 бит INT.

Когда я пытаюсь получить доступ к этим данным в своей среде разработки, я получаю:

MongoCursorException

Не может изначально представлять длинные 1108547148863410176 на этой платформе

В интернете я обнаружил, что параметр mongoDB, называемый «mongo.native_long = 1», необходим для использования 64-битного INT на 64-битной архитектуре.
Но когда я пытаюсь добавить этот параметр в мой файл «php.ini», сервер не запускается и выдает ошибку вроде:

[19-Nov-2014 18:25:52 UTC] Неустранимая ошибка PHP: запуск PHP: во избежание повреждения данных нельзя включать параметр mongo.native_long на 32-разрядных платформах в поле «Неизвестно» в строке 0

Моя библиотека расширений mongoDB построена на 32-битной или я что-то пропустил?

5

Решение

Для меня единственное, что сработало, было:

ini_set('mongo.long_as_object', 1);

Надеюсь, это сэкономит кому-то время. Это одна из тех глупостей, которые заставляют задуматься:
«Какого черта я стал программистом?»

РЕДАКТИРОВАТЬ: получение правильный водитель из http://pecl.php.net/package/mongo помог мне. Я скачал последнюю версию драйвера. Проверьте свою версию с помощью команды phpinfo (). Например. для меня на 64-битной Win7 это:

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

Обратите внимание на строку «TS, VC11». Это означает, что это потокобезопасный, но ваша версия не может быть потокобезопасной (NTS).

Поэтому я скачал 64bit, TS для PHP 5.5. Я занимался этой проблемой долгое время и, наконец, надлежащий водитель решил эту проблему.

6

Другие решения

При использовании 32-битной консоли Apache (например, wampp или xampp) вы должны добавить в файл php.ini следующее:

mongo.long_as_object= 1

Приведенная выше строка должна преобразовать все длинные объекты в объект, таким образом исключение не произойдет.

Надеюсь, что это поможет всем 32-битным пользователям, которые имеют эту проблему.

3

У меня была такая же проблема с WAMP x64 на Windows X64. Мое решение было обновить библиотеку Mongo до 1.6.14

0

C: \ wamp64 \ bin \ php \ php5.6.35 в php.ini добавить: mongo.long_as_object = 1

а также

C: \ wamp64 \ bin \ apache \ apache2.4.33 \ bin в php.ini add: mongo.long_as_object = 1

0