我有一个CentOS 6.5和PHP 5.5.11的开发者服务器(最新来自REMI仓库)。 今天我做了:
yum --enablerepo=remi,remi-php55 update
更新的Apache和一些其他库,如PHP的Mongo(PECL我认为)。 更新后,我重新启动了我的httpd服务,并注意到它closuresApache失败。 “显然”再次启动纠正,但现在我发现服务器不工作 – 网页不提供服务。
检查Apache日志显示以下行:
PHP致命错误:PHP启动:为防止数据损坏,您不允许在第0行的未知32位平台上启用mongo.native_long设置
也许我可以通过禁用或卸载该扩展来解决这个问题,但是由于我在某些地方使用了扩展,这不是一个真正的select。
任何关于如何解决这个问题的build议,除了禁用扩展?
编辑:为什么如果系统是i686和图书馆是i686我得到这个错误
我做了一些关于YUM日志的研究并看到结果:
tail /var/log/yum.log Apr 03 01:25:45 Updated: php-recode-5.5.11-1.el6.remi.i686 Apr 03 01:25:45 Updated: php-mbstring-5.5.11-1.el6.remi.i686 Apr 03 01:25:46 Updated: php-intl-5.5.11-1.el6.remi.i686 Apr 03 01:25:47 Updated: php-xml-5.5.11-1.el6.remi.i686 Apr 04 09:09:59 Updated: krb5-libs-1.10.3-15.el6_5.1.i686 Apr 04 09:10:00 Updated: httpd-tools-2.2.15-30.el6.centos.i686 Apr 04 09:10:07 Updated: php-pecl-mongo-1.5.0-1.el6.remi.5.5.i686 Apr 04 09:10:15 Updated: httpd-2.2.15-30.el6.centos.i686 Apr 04 09:10:16 Updated: krb5-workstation-1.10.3-15.el6_5.1.i686 Apr 04 09:10:21 Updated: krb5-devel-1.10.3-15.el6_5.1.i686
为什么如果图书馆是php-pecl-mongo-1.5.0-1.el6.remi.5.5.i686我得到那个错误? 哪里不对?
编辑2:降级有问题的扩展
由于以前的testing不起作用,我正在尝试降级该库如下:
yum downgrade php-pecl-mongo-1.5.0-1.el6.remi.5.5.i686 --enablerepo=remi,remi-php55 Loaded plugins: fastestmirror, security Setting up Downgrade Process Loading mirror speeds from cached hostfile * base: centos.secrel.com.br * epel: mirror.cedia.org.ec * extras: centos.secrel.com.br * remi: mirror.1000mbps.com * remi-php55: mirror.1000mbps.com * updates: mirrors.ucr.ac.cr Only Upgrade available on package: php-pecl-mongo-1.5.0-1.el6.remi.5.5.i686 Nothing to do
而且我也不能,对这个也有帮助吗?
编辑3:寻找php.ini的位置
因此,由于Ubuntu和CentOS具有不同的configuration,我很难说Apache可以使用另一个php.ini文件,但是它使用了我更改的内容,如下所示:
locate php.ini /etc/php.ini /etc/php.ini.rpmnew /usr/share/doc/php-common-5.5.11/php.ini-development /usr/share/doc/php-common-5.5.11/php.ini-production /var/www/html/apps/portal_de_logistica/vendor/doctrine/cache/tests/travis/php.ini /var/www/html/apps/portal_ingenieros/vendor/doctrine/cache/tests/travis/php.ini /var/www/html/imaginamos/vendor/doctrine/cache/tests/travis/php.ini /var/www/html/kraken/vendor/doctrine/cache/tests/travis/php.ini
在/etc/php.ini我有这个在文件结尾:
;Mongo [mongodb] mongo.native_long = 0 mongo.long_as_object = 1
此外,我发现任何可能导致问题的文件,通过做一个ini_set()并没有发现,如下所示:
grep -R "mongo.native_long" /var/www/html/ grep: /var/www/html/apps/portal_de_logistica/web/bundles/acmedemo: No such file or directory
解
所以,在头痛之后我find了解决办法:
yum remove php-pecl-mongo-1.5.0-1.el6.remi.5.5.i686 yum --enablerepo=remi,remi-php55 install php-devel.i686 pecl install mongo
添加“扩展= mongo.so”到php.ini之后,我的Apache再次工作
你的错误是:
PHP致命错误:PHP启动:为防止数据损坏,您不允许在第0行的未知32位平台上启用mongo.native_long设置
这里的关键是mongo.native_long设置。 看起来像你的操作系统是32位的,但是这个特定的设置需要一个64位的操作系统。 如果这是一个开发服务器,最好的长期解决scheme是将其重build为64位操作系统。
更直接的select是进入你的php.ini文件,并禁用mongo.native_long – 不是所有的MongoDB-通过将这个configuration参数放置在php.ini如下所示:
mongo.native_long = 0
现在重启Apache。 事情应该工作。 这是假设您的代码库中的任何东西都不需要mongo.native_long的特定function。 有关MongoDBconfiguration的更多细节,请查看这里的官方文档 。 有关mongo.native_long更多详细信息, 此博客条目似乎非常有用:
在64位平台上,mongo.native_long设置允许将64位整数存储在MongoDB中。 在这种情况下使用的MongoDB数据types是BSON LONG,而不是在closures此设置时使用的BSON INT。 该设置也改变了BSON LONG在从MongoDB读回时的行为方式。 如果没有启用mongo.native_long,驱动程序会将每个BSON LONG转换为一个PHP double,导致精度损失。
你的错误似乎似乎与mongo php驱动程序的这个更新有关: https : //jira.mongodb.org/browse/PHP-971 (如果你看看git commit中的错误,就是这样)。
如果你已经将mongo.native_long设置为0,但你仍然得到错误,请查看任何php脚本或php页面,看看他们是否有ini_set('mongo.native_long', 1); 在顶部(考虑到它抱怨0号线)。