我有一个带有 CentOS 6.5 和 PHP 5.5.11 的开发人员服务器(来自 REMI repos 的最新版本)。今天我做了:
yum --enablerepo=remi,remi-php55 update
这更新了 Apache 和其他一些库,如 Mongo for PHP(我认为是 PECL)。更新后,我重新启动了我的httpd
服务,并注意到它无法关闭 Apache。“显然”再次启动它更正了这一点,但现在我发现服务器无法正常工作 - 没有提供网页。
检查 Apache 日志会显示这一行:
PHP 致命错误:PHP 启动:为防止数据损坏,不允许在第 0 行的 Unknown 中打开 32 位平台上的 mongo.native_long 设置
也许我可以通过禁用或卸载该扩展程序来解决此问题,但由于我在某些地方使用该扩展程序,所以这不是一个真正的选择。
除了禁用扩展程序之外,有关如何解决此问题的任何建议?
编辑:为什么如果系统是 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:降级有问题的扩展
由于以前的测试不起作用,我现在尝试按如下方式降级该库:
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
我不能,所以对这个也有帮助吗?
EDIT3:寻找 php.ini 位置
因此,由于 Ubuntu 和 CentOS 具有不同的配置,我坚持认为 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
我还通过执行 a 找到了任何可能导致问题的文件,但没有找到任何文件,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
解决方案
因此,经过一些头痛后,我找到了解决方案:
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
添加“extension=mongo.so”php.ini
之后我的 Apache 再次工作
您的错误内容如下:
这里的关键是
mongo.native_long
设置。似乎您的操作系统是 32 位的,但此特定设置需要 64 位操作系统。如果这是一个开发服务器,对您来说最好的长期解决方案是将其重建为 64 位操作系统。更直接的选择是进入你的
php.ini
文件并禁用mongo.native_long
——不是所有的 MongoDB——通过php.ini
像这样放置这个配置参数:现在重新启动 Apache。事情应该会奏效。这是假设
mongo.native_long
代码库中的任何内容都不需要的特定功能。有关 MongoDB 配置的更多详细信息,请在此处查看官方文档。有关 的更多详细信息mongo.native_long
,此博客条目似乎很有帮助:您的错误似乎与 mongo php 驱动程序的此更新有关:https ://jira.mongodb.org/browse/PHP-971 (如果您查看 git commit 中的错误,就是这样)。
如果您已设置
mongo.native_long
为 0,但仍然出现错误,请查看任何 php 脚本或 php 页面,并查看它们是否ini_set('mongo.native_long', 1);
位于顶部(考虑到它在抱怨第 0 行)。