我的开发环境存在很大问题。
背景:
我的电脑:赢8.1 x64
我的WampServer安装: x64
我的MongoDB安装: x64 来自http://www.mongodb.org/downloads
我已经从http://pecl.php.net/package/mongo安装了php扩展程序。
我的问题是我们的生产服务器将大约64位INT存储到数据库中。
当我尝试在我的开发环境中访问这些数据时,我得到了:
MongoCursorException
无法在此平台上原生代表长1108547148863410176
我在互联网上发现mongoDB的一个参数名为" mongo.native_long = 1"需要在64位架构上使用64位INT 但是当我尝试在我的" php.ini"中添加这个参数时文件,服务器不会启动并给我一个错误,如:
[19-Nov-2014 18:25:52 UTC] PHP致命错误:PHP启动:为了防止数据损坏,您不能在第0行的Unknown中打开32位平台上的mongo.native_long设置
我的mongoDB扩展DLL是在32位上构建还是我错过了要做的事情?
答案 0 :(得分:6)
对我来说唯一有用的是:
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)。
所以我下载了64位,TS for PHP 5.5。我很长时间处理这个问题,最后,正确的司机解决了这个问题。
答案 1 :(得分:4)
当使用32位apache控制台(如wampp或xampp)时,你应该将以下内容添加到你的php.ini文件中:
mongo.long_as_object= 1
以上行应该将所有多头转换为对象,这样就不会发生异常。
希望这可以帮助所有遇到此问题的32位用户。
答案 2 :(得分:0)
我在Windows X64上遇到与WAMP x64相同的问题。我的修复是update the Mongo library to 1.6.14
答案 3 :(得分:0)
C:\ wamp64 \ bin \ php \ php5.6.35添加:mongo.long_as_object = 1
和
C:\ wamp64 \ bin \ apache \ apache2.4.33 \ bin在php.ini中添加:mongo.long_as_object = 1