在 CentOS 6.5 x64 上進行 PHP 升級後 Apache 無法啟動
我有一個帶有 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,從而導致精度損失。