Centos

在 CentOS 6.5 x64 上進行 PHP 升級後 Apache 無法啟動

  • April 4, 2014

我有一個帶有 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 再次工作

您的錯誤內容如下:

PHP 致命錯誤:PHP 啟動:為防止數據損壞,在第 0 行的 Unknown 中不允許打開 32 位平台上的 mongo.native_long 設置

這裡的關鍵是mongo.native_long設置。似乎您的作業系統是 32 位的,但此特定設置需要 64 位作業系統。如果這是一個開發伺服器,對您來說最好的長期解決方案是將其重建為 64 位作業系統。

更直接的選擇是進入你的php.ini文件並禁用mongo.native_long——不是所有的 MongoDB——通過php.ini像這樣放置這個配置參數:

mongo.native_long = 0

現在重新啟動 Apache。事情應該會奏效。這是假設mongo.native_long程式碼庫中的任何內容都不需要的特定功能。有關 MongoDB 配置的更多詳細資訊,請在此處查看官方文件。有關 的更多詳細資訊mongo.native_long此部落格條目似乎很有幫助:

在 64 位平台上,mongo.native_long 設置允許將 64 位整數儲存在 MongoDB 中。在這種情況下使用的 MongoDB 數據類型是 BSON LONG,而不是在關閉此設置時使用的 BSON INT。該設置還改變了從 MongoDB 讀回 BSON LONG 時的行為方式。如果不啟用 mongo.native_long,驅動程序會將每個 BSON LONG 轉換為 PHP double,從而導致精度損失。

引用自:https://serverfault.com/questions/586731