centos7-featured-image

CenOS7 上將 php 5.4 升級至 php 5.6

花了兩天(大多時間都在重灌 CentOS 7 跟找錯誤的解法)終於是成功把 php版本從 5.4 升到 5.6.31啦!

有點感動(外加頭痛,因為 yum )。

所以今天要說明的是在 CentOS 7 上如何將 php 版本手動從 5.4 升到 5.6!

1.伺服器環境

示範的環境為 RHEL/CentOS 7,同時 php 初始版本為5.4(CentOS7安裝時額外安裝選擇php)。

2.開始之前

首先開啟終端機確認 php 版本。

  1. [root@centos7 ~]# php -v

沒意外版本號應該是 5.4.x(後面的 x 無所謂),確認版本號後,大多數人第一直覺反應(想升級的話),可能應該都是使用 yum update 這個指令吧?

第一次灌好 CentOS 7 和 php 後的某貓就是這樣做了:「yum update php」。

然後終端機上顯示沒有任何可使用的更新。

⋯⋯what???

php不是到v7.x了嗎你跟我說沒可用的更新???

基於不相信又試了好幾次結果還是那句「沒有可使用的更新」,某貓認了囧RZ。

各位被 update 指令騙了(?)的同學不要生氣,升級一事絕對不只一條路可以走der,讓我們繼續看下去。

3.升級準備

這邊會簡單說明等等升級需要的東西是什麼,想先升級再來補資訊或是已經知道的同學這段可以跳過w

這次php版本升級需要的有:

  1. Remi php5.6 的 repository
  2. 視更新錯誤可能需要 gd.rpm 跟 libzip.rpm

Remi 包含了較新版本的 mysql 跟 php 的 linux套件來源,由 Remi 負責維護,網站:Remi’s RPM repository,同時也提供可直接安裝的rpm檔。

那rpm又是什麼呢?

rpm,可指 linux 系統下使用的套件管理程式(RedHat Package Manager),也可指 .rpm 格式的套件。目前是linux系統套件資源最豐富的套件類型之一。

更詳細的介紹可以往維基百科-RPM套件管理員,或者鳥哥的Linux私房菜

4.開始升級

首先設定需要的 php56 repository:(#和>都是終端機本身的符號,跟bash的$一樣,不要額外手動輸入)

  1. [root@centos7 ~]# cat > /etc/yum.repos.d/remi-php56.repo << EOF
  2. > [remi-php56]
  3. > name=remi-php56
  4. > baseurl=http://rpms.famillecollet.com/enterprise/7/php56/x86_64/
  5. > enabled=1
  6. > gpgcheck=0
  7. > EOF

手動清除快取記憶體。(這邊應該可以跳過,但某貓是有清。)

  1. [root@centos7 ~]# yum clean expire-cache

開始更新(安裝php56)。

  1. [root@centos7 ~]# yum update

更新時終端機會出現一堆字,這時請特別注意是否有出現「ERROR」開頭的句子。一般來說可能會遇到三個 ERROR(可能是三個,可能是其中一個或兩個):

  1. # Error: Package: php-gd-5.6.22-1.el7.remi.x86_64 (remi-php56)
  2.   Requires: libgd.so.3()(64bit)
  3. # Error: Package: php-gd-5.6.22-1.el7.remi.x86_64 (remi-php56)
  4.   Requires: gd-last(x86-64) >= 2.1.1
  5. # Error: Package: php-pecl-zip-1.13.2-1.el7.remi.5.6.x86_64 (remi-php56)
  6.   Requires: libzip.so.4()(64bit)
  7.  You could try using –skip-broken to work around the problem
  8.  You could try running: rpm -Va –nofiles –nodigest

這三個錯誤可以分為兩種狀況:gd的問題或libzip的問題,某貓是兩個都遇到了,不過錯誤只出現第二個跟第三個。

由於第一個跟第二個看來都是gd的問題,所以萬一遇到第一個卻沒第二個,那解法應該是一樣的(都是gd嘛。)

可能有同學會想問,這邊的錯誤如果不理他可以嗎?NONONO,絕對不行。

剛剛第三部分如果同學有到鳥哥的Linux私房菜看的話,會看到rpm這種格式的套件安裝的兩大好處,其中之一就是「它紀錄了這個套件安裝時預先需要安裝的其他套件資訊」。也就是說,當預先需要的套件不存在時,他會警告,然後,安裝停止。

這邊就是這樣的狀況,不信的話這邊可以使用「php -v」看看現在的php版本,可以發現還在 v5.4.x,5.6.x什麼的還沒安裝。

所以還是乖乖安裝這兩個缺少的預先套件吧。

首先如果是前兩個gd的問題,請這樣:

  1. [root@centos7 ~]# wget http://rpms.famillecollet.com/enterprise/7/remi/x86_64/gd-last-2.2.5-1.el7.remi.x86_64.rpm
  2. [root@centos7 ~]# yum localinstall gd-last-*.rpm

這表示下載需要的rpm檔,然後本地安裝。

如果是 libzip的問題,請這樣:

  1. [root@centos7 ~]# wget http://rpms.famillecollet.com/enterprise/7/remi/x86_64/libzip5-1.2.0-1.el7.remi.x86_64.rpm
  2. [root@centos7 ~]# yum localinstall libzip5-*.rpm

libzip的更新這部分,有些網站的安裝版本可能是「libzip-last-……」,那些版本要不是連結不存在,要不裝了還是ERROR(某貓都試過了),最後是這個「libzip5-1.2.0-1.el7」才成功。

根據看到的錯誤將對應步驟完成後,再次進行 update。

  1. [root@centos7 ~]# yum update

這樣應該就能看見 php56 的安裝訊息了。

安裝完畢後,使用「php -v」,當看到版本號為 v5.6.31,就表示升級成功了!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s