在CentOS 6.5 x64上PHP升级后,Apache无法启动

我有一个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号线)。