程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 在CentOS上把PHP從5.4升級到5.5,centosphp5.45.5

在CentOS上把PHP從5.4升級到5.5,centosphp5.45.5

編輯:關於PHP編程

在CentOS上把PHP從5.4升級到5.5,centosphp5.45.5


在CentOS上把PHP從5.4升級到5.5

摘要:本文記錄了在CentOS 6.3上,把PHP從5.4.8升級到5.5.13的過程。

1. 概述

在我做的一個項目中,最近我對生產服務器上的一系列系統軟件進行了升級,包括Git、Nginx、MySQL和PHP。這篇文章講的是升級PHP的過程,其他軟件的升級,可見下面列出的文章。

  • 在CentOS上把git從1.7.1升級到1.7.12.4
  • 在CentOS上把Nginx從1.2.4升級到1.6.0
  • 在CentOS上把MySQL從5.5升級到5.6
  • 在CentOS上把PHP從5.4升級到5.5 (本文)

在我加入這個項目之前,服務器上的PHP已經安裝設置好了,我只是正常使用而已。現在過去1年了,所有的開發工作都告一段落,有時間升級服務器上的軟件了。升級這種事情是應當經常做的,倒不是為了追最新版本,而是當正式版本發放出來的時候,應該及時更新, 以便獲得最新的更正、補丁,避免服務器上的漏洞,減少安全隱患。

升級是在今年6月13-14日進行的,到今天才有空做個記錄,便於日後參考。

2. 計劃

計劃就是預案,就是事先的准備(包括心理上的)、更明細的步驟、對各種情況及對意外的對策,當然,我們不可能面面俱到,預測一切,不然就成神了,所以要隨時准備脫稿演出,think out of the box。

2.1 了解情況

計劃要有針對性,所以要先”踩點兒“。

通過在系統上,用find之類的命令,或者通過網頁用phpinfo()函數來顯示關於PHP的信息,可以找到PHP安裝在/usr/local/php目錄下。這說明PHP是從源代碼編譯安裝的,因為yum和rpm是不會安裝到/usr/local/php這個路徑的。在QQ群友的提示下,找到PHP 5.4.8的源代碼位於/usr/local/src/php-5.4.8目錄中,進一步確認PHP是從源代碼編譯安裝的。

查看PHP版本:

# /usr/local/php/bin/php -v
PHP 5.4.8 (cli) (built: Nov 13 2012 00:08:08)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Tehnologies

再查看PHP-FPM的運行情況。那兩天看文檔,我才知道有PHP-FPM(FastCGI Process Manager)這麼個東西,在5.4之後已經包括在PHP之中了,詳見參考資料[]13][14]。

查看PHP-FPM使用的端口:

# netstat -ntpul | grep php-fpm
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      2881/php-fpm

查看PHP-FPM的進程:

# ps aux | grep php-fpm
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      2881  0.0  0.2 204172  2064 ?        Ss    2013  38:09 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www      18982  0.0  1.4 212796 14816 ?        S    19:12   0:03 php-fpm: pool www
www      18983  0.0  1.4 211996 14572 ?        S    19:13   0:03 php-fpm: pool www
www      18984  0.0  1.4 212276 14876 ?        S    19:13   0:03 php-fpm: pool www
root     19144  0.0  0.0 103236   864 pts/0    S+   23:29   0:00 grep php-fpm

查看PHP-FPM的版本:

# /usr/local/php/sbin/php-fpm -v
PHP 5.4.8 (fpm-fcgi) (built: Nov 13 2012 00:15:58)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies

查看上次系統啟動的時間,這是怕安裝的東西沒重啟而沒有生效:

# who -b
         system boot  2013-01-04 01:07
# last reboot
reboot   system boot  2.6.32-279.14.1. Fri Jan  4 01:07 - 20:36 (526+19:29)
reboot   system boot  2.6.32-220.13.1. Mon Nov 12 17:53 - 20:36 (579+02:42)
reboot   system boot  2.6.32-220.13.1. Thu May 10 17:12 - 17:13  (00:01)
reboot   system boot  2.6.32-220.13.1. Wed May  9 15:31 - 15:36  (00:04)
reboot   system boot  2.6.32-220.13.1. Wed May  9 15:03 - 15:29  (00:26)
reboot   system boot  2.6.32-220.13.1. Wed May  9 10:09 - 12:26  (02:16)
reboot   system boot  2.6.32-220.13.1. Thu May  3 17:23 - 17:25  (00:02)
reboot   system boot  2.6.32-220.13.1. Fri May  4 01:17 - 17:22  (-7:-54)
reboot   system boot  2.6.32-220.13.1. Fri Apr 20 21:33 - 17:22 (12+19:48)
reboot   system boot  2.6.32-220.13.1. Sat Apr 21 03:39 - 17:22 (12+13:42)
reboot   system boot  2.6.32-220.13.1. Fri Apr 20 18:02 - 17:22 (12+23:19)
reboot   system boot  2.6.32-220.13.1. Thu Apr 19 19:51 - 17:59  (22:07)

其實這種擔心是多余的,因為Linux和Windows不一樣,基本上新安裝的東西,都有命令行可以重啟,只要你知道相應的命令行,不需要重啟整個系統。

小結,現有的PHP 5.4.8安裝在/usr/local/php目錄下,是編譯安裝的,源代碼位於/usr/local/src/php-5.4.8目錄中。編譯安裝的好處是,可以自己定制,增減PHP擴展等等。建議,如無必要,不要使用編譯安裝,因為這樣的安裝,操作麻煩,對操作者的要求比較高,又無法利用yum和rpm這樣的工具,不便於升級、卸載。

這也是為什麼我用yum update php命令無法直接升級PHP的原因,因為yum或者rpm根本不知道用源代碼編譯安裝的PHP。下面是我嘗試的結果:

# yum update php
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.163.com
 * epel: mirrors.hust.edu.cn
 * extras: mirrors.163.com
 * remi: mirrors.hustunique.com
 * remi-php55: mirrors.hustunique.com
 * updates: mirrors.163.com
Setting up Update Process
Package(s) php available, but not installed.
No Packages marked for Update

可見,yum沒有找到已經安裝的php包,所以沒什麼可以升級的。孤獨的編譯安裝,沒人待見,看來要在角落裡終老一生了。

2.2 確定計劃

經過在幾個CakePHP、PHP相關的QQ群裡,向其他朋友的請教和討論,(此處略去15000字),其實這是和上面的”踩點兒“互相摻雜在一起進行的。在這裡要特別感謝CakePHP群中的Christian和嚴謹的PHP HHVM MySQL群中的Linux 管理員(Freax)兩位朋友。最終在朋友們的幫助下形成了下面的計劃要點:

  • 保留原有編譯安裝的PHP 5.4.8,沒必要去動它,不用就是了
  • 用yum安裝PHP 5.5.13,配置PHP-FPM 5.5.13使用另一個端口(比如9001)
  • 修改Nginx的配置,使用在新端口上的PHP-FPM 5.5.13
  • 如何重啟PHP-FPM?
    答:php-fpm在5.4以後默認是二進制文件了,不再用service php-fpm start這種啟動了。可以在/etc/rc.local (link to /etc/rc.d/rc.local) 加上這條命令

前期的調研、計劃,花了差不多2天時間,而之後的安裝、配置,也就用了3-4個小時。

3. 安裝、配置PHP 5.5.13

根據這兩天讀的文檔,確定使用remi安裝庫,使用yum來安裝PHP 5.5.13。

3.1 添加remi安裝庫

下面的操作依據參考資料[4]:

# wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm

3.2 用yum安裝PHP 5.5.13

從之前PHP 5.4.8下phpinfo()的輸出,知道了舊的PHP 5.4.8上安裝的PHP擴展,這樣確定了下面需要安裝的包(命令yum install之後的參數):

# yum install php php-fpm php-gd php-mysqlnd php-mcrypt php-mbstring php-pdo
Dependencies Resolved

================================================================================
 Package                Arch      Version                   Repository     Size
================================================================================
Installing:
 libjpeg-turbo          x86_64    1.2.1-3.el6_5             updates       174 k
     replacing  libjpeg.x86_64 6b-46.el6
 libjpeg-turbo-devel    x86_64    1.2.1-3.el6_5             updates        96 k
     replacing  libjpeg-devel.x86_64 6b-46.el6
 php                    x86_64    5.5.13-3.el6.remi         remi-php55    2.6 M
 php-fpm                x86_64    5.5.13-3.el6.remi         remi-php55    1.3 M
 php-gd                 x86_64    5.5.13-3.el6.remi         remi-php55     69 k
 php-mbstring           x86_64    5.5.13-3.el6.remi         remi-php55    958 k
 php-mcrypt             x86_64    5.5.13-3.el6.remi         remi-php55     40 k
 php-mysqlnd            x86_64    5.5.13-3.el6.remi         remi-php55    261 k
 php-pdo                x86_64    5.5.13-3.el6.remi         remi-php55    109 k
Installing for dependencies:
 apr-util-ldap          x86_64    1.3.9-3.el6_0.1           base           15 k
 fontconfig             x86_64    2.8.0-3.el6               base          186 k
 gd-last                x86_64    2.1.0-2.el6.remi          remi          129 k
 httpd                  x86_64    2.2.15-30.el6.centos      updates       821 k
 httpd-tools            x86_64    2.2.15-30.el6.centos      updates        73 k
 libX11                 x86_64    1.5.0-4.el6               base          584 k
 libX11-common          noarch    1.5.0-4.el6               base          192 k
 libXau                 x86_64    1.0.6-4.el6               base           24 k
 libXpm                 x86_64    3.5.10-2.el6              base           51 k
 libmcrypt              x86_64    2.5.8-9.el6               epel           96 k
 libtiff                x86_64    3.9.4-10.el6_5            updates       343 k
 libxcb                 x86_64    1.8.1-1.el6               base          110 k
 libxslt                x86_64    1.1.26-2.el6_3.1          base          452 k
 mailcap                noarch    2.1.31-2.el6              base           27 k
 php-cli                x86_64    5.5.13-3.el6.remi         remi-php55    2.5 M
 php-common             x86_64    5.5.13-3.el6.remi         remi-php55    1.0 M
 php-pear               noarch    1:1.9.4-28.el6.remi       remi          373 k
 php-pecl-jsonc         x86_64    1.3.5-1.el6.remi.5.5      remi-php55     46 k
 php-pecl-zip           x86_64    1.12.4-1.el6.remi.5.5     remi-php55    269 k
 php-process            x86_64    5.5.13-3.el6.remi         remi-php55     54 k
 php-xml                x86_64    5.5.13-3.el6.remi         remi-php55    206 k
 t1lib                  x86_64    5.1.2-6.el6_2.1           base          160 k

Transaction Summary
================================================================================
Install      31 Package(s)

yum自動計算出需要的依賴安裝包,總共有31個安裝包需要下載、安裝。

下面詢問是否繼續下載,回答y,並按回車即可繼續:

Total download size: 13 M
Is this ok [y/N]: y
Downloading Packages:
(1/31): apr-util-ldap-1.3.9-3.el6_0.1.x86_64.rpm         |  15 kB     00:00
(2/31): fontconfig-2.8.0-3.el6.x86_64.rpm                | 186 kB     00:00
(3/31): gd-last-2.1.0-2.el6.remi.x86_64.rpm              | 129 kB     00:00
(4/31): httpd-2.2.15-30.el6.centos.x86_64.rpm            | 821 kB     00:00
(5/31): httpd-tools-2.2.15-30.el6.centos.x86_64.rpm      |  73 kB     00:00
(6/31): libX11-1.5.0-4.el6.x86_64.rpm                    | 584 kB     00:00
(7/31): libX11-common-1.5.0-4.el6.noarch.rpm             | 192 kB     00:00
(8/31): libXau-1.0.6-4.el6.x86_64.rpm                    |  24 kB     00:00
(9/31): libXpm-3.5.10-2.el6.x86_64.rpm                   |  51 kB     00:00
(10/31): libjpeg-turbo-1.2.1-3.el6_5.x86_64.rpm          | 174 kB     00:00
(11/31): libjpeg-turbo-devel-1.2.1-3.el6_5.x86_64.rpm    |  96 kB     00:00
(12/31): libmcrypt-2.5.8-9.el6.x86_64.rpm                |  96 kB     00:00
(13/31): libtiff-3.9.4-10.el6_5.x86_64.rpm               | 343 kB     00:00
(14/31): libxcb-1.8.1-1.el6.x86_64.rpm                   | 110 kB     00:00
(15/31): libxslt-1.1.26-2.el6_3.1.x86_64.rpm             | 452 kB     00:00
(16/31): mailcap-2.1.31-2.el6.noarch.rpm                 |  27 kB     00:00
(17/31): php-5.5.13-3.el6.remi.x86_64.rpm                | 2.6 MB     00:00
(18/31): php-cli-5.5.13-3.el6.remi.x86_64.rpm            | 2.5 MB     00:00
(19/31): php-common-5.5.13-3.el6.remi.x86_64.rpm         | 1.0 MB     00:00
(20/31): php-fpm-5.5.13-3.el6.remi.x86_64.rpm            | 1.3 MB     00:00
(21/31): php-gd-5.5.13-3.el6.remi.x86_64.rpm             |  69 kB     00:00
(22/31): php-mbstring-5.5.13-3.el6.remi.x86_64.rpm       | 958 kB     00:00
(23/31): php-mcrypt-5.5.13-3.el6.remi.x86_64.rpm         |  40 kB     00:00
(24/31): php-mysqlnd-5.5.13-3.el6.remi.x86_64.rpm        | 261 kB     00:00
(25/31): php-pdo-5.5.13-3.el6.remi.x86_64.rpm            | 109 kB     00:00
(26/31): php-pear-1.9.4-28.el6.remi.noarch.rpm           | 373 kB     00:00
(27/31): php-pecl-jsonc-1.3.5-1.el6.remi.5.5.x86_64.rpm  |  46 kB     00:00
(28/31): php-pecl-zip-1.12.4-1.el6.remi.5.5.x86_64.rpm   | 269 kB     00:00
(29/31): php-process-5.5.13-3.el6.remi.x86_64.rpm        |  54 kB     00:00
(30/31): php-xml-5.5.13-3.el6.remi.x86_64.rpm            | 206 kB     00:00
(31/31): t1lib-5.1.2-6.el6_2.1.x86_64.rpm                | 160 kB     00:00
--------------------------------------------------------------------------------
Total                                           3.6 MB/s |  13 MB     00:03

之後還有一些Is this ok [y/N]:的問題,一律回答y。經過一輪問答和安裝,最後完成時的小結為:

Installed:
  libjpeg-turbo.x86_64 0:1.2.1-3.el6_5
  libjpeg-turbo-devel.x86_64 0:1.2.1-3.el6_5
  php.x86_64 0:5.5.13-3.el6.remi
  php-fpm.x86_64 0:5.5.13-3.el6.remi
  php-gd.x86_64 0:5.5.13-3.el6.remi
  php-mbstring.x86_64 0:5.5.13-3.el6.remi
  php-mcrypt.x86_64 0:5.5.13-3.el6.remi
  php-mysqlnd.x86_64 0:5.5.13-3.el6.remi
  php-pdo.x86_64 0:5.5.13-3.el6.remi

Dependency Installed:
  apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1
  fontconfig.x86_64 0:2.8.0-3.el6
  gd-last.x86_64 0:2.1.0-2.el6.remi
  httpd.x86_64 0:2.2.15-30.el6.centos
  httpd-tools.x86_64 0:2.2.15-30.el6.centos
  libX11.x86_64 0:1.5.0-4.el6
  libX11-common.noarch 0:1.5.0-4.el6
  libXau.x86_64 0:1.0.6-4.el6
  libXpm.x86_64 0:3.5.10-2.el6
  libmcrypt.x86_64 0:2.5.8-9.el6
  libtiff.x86_64 0:3.9.4-10.el6_5
  libxcb.x86_64 0:1.8.1-1.el6
  libxslt.x86_64 0:1.1.26-2.el6_3.1
  mailcap.noarch 0:2.1.31-2.el6
  php-cli.x86_64 0:5.5.13-3.el6.remi
  php-common.x86_64 0:5.5.13-3.el6.remi
  php-pear.noarch 1:1.9.4-28.el6.remi
  php-pecl-jsonc.x86_64 0:1.3.5-1.el6.remi.5.5
  php-pecl-zip.x86_64 0:1.12.4-1.el6.remi.5.5
  php-process.x86_64 0:5.5.13-3.el6.remi
  php-xml.x86_64 0:5.5.13-3.el6.remi
  t1lib.x86_64 0:5.1.2-6.el6_2.1

Replaced:
  libjpeg.x86_64 0:6b-46.el6          libjpeg-devel.x86_64 0:6b-46.el6

Complete!

3.3 配置PHP-FPM的啟動

因為使用yum安裝,安裝過程已經拷貝好了PHP-FPM的服務daemon,只需確保PHP-FPM服務能在系統重啟時自動啟動就行了:

# chkconfig php-fpm on

查看PHP-FPM服務的自啟動狀態:

# chkconfig --list php-fpm
php-fpm         0:off   1:off   2:on    3:on    4:on    5:on    6:off

正確。

3.4 停止PHP-FPM 5.4.8

查看PHP-FPM 5.4.8的進程:

# ps aux | grep php-fpm
root      2881  0.0  0.1 204172  1972 ?        Ss    2013  38:13 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www      19378  0.0  1.4 212764 14736 ?        S    10:30   0:14 php-fpm: pool www
www      19379  0.0  1.5 213352 15888 ?        S    10:32   0:13 php-fpm: pool www
www      19657  0.0  1.3 212076 13964 ?        S    18:45   0:02 php-fpm: pool www
root     20083  0.0  0.0 103236   864 pts/0    S+   22:40   0:00 grep php-fpm

可見,當前PHP-FPM 5.54.8進程的進程號(pid)是2881,注意其使用的配置文件/usr/local/php/etc/php-fpm.conf位於編譯安裝PHP的目錄,證實了這是PHP-FPM 5.54.8進程。其余進程為其子進程,而grep php-fpm是查看進程這個命令的進程。

中斷PHP-FPM 5.54.8進程:

# kill -TERM 2881

再次查看PHP-FPM的進程:

# ps aux | grep php-fpm
root     20087  0.0  0.0 103236   864 pts/0    S+   22:43   0:00 grep php-fpm

已經沒有PHP-FPM的進程了,唯一剩下的grep php-fpm是查看進程這個命令的進程。

3.5 啟動PHP-FPM 5.5.13

PHP-FPM的配置,我遵照的是參考資料[10],這是一個分級結構的配置文件,多個配置文件各司其職,便於更換配置,啟用、停止配置的各模塊也更容易。

啟動php-fpm服務:

# service php-fpm start
Starting php-fpm:                                          [  OK  ]

順利啟動。

再查看其進程:

# ps aux | grep php-fpm
root     20099  0.0  0.5 313272  5832 ?        Ss   22:44   0:00 php-fpm: master process (/etc/php-fpm.conf)
apache   20100  0.4  1.1 317112 11876 ?        S    22:44   0:00 php-fpm: pool www
apache   20101  0.3  1.5 319936 15316 ?        S    22:44   0:00 php-fpm: pool www
apache   20102  0.4  1.6 322244 16892 ?        S    22:44   0:00 php-fpm: pool www
apache   20103  0.4  1.5 320964 15636 ?        S    22:44   0:00 php-fpm: pool www
apache   20104  0.3  1.3 319648 14256 ?        S    22:44   0:00 php-fpm: pool www
apache   20106  0.3  1.3 319140 13696 ?        S    22:45   0:00 php-fpm: pool www
apache   20107  0.1  0.7 313776  8140 ?        S    22:46   0:00 php-fpm: pool www
root     20109  0.0  0.0 103236   864 pts/0    S+   22:47   0:00 grep php-fpm

可見其進程號為20099,其余進程為其子進程,而grep php-fpm是查看進程這個命令的進程。

3.6 問題:數據庫的圖像文件沒有顯示

原因:PHP-FPM子進程的所有者:組是apache,而不是www。而Nginx是運行在www用戶下,故應當改為www。

編輯/etc/php-fpm.d/www.conf:

[www]
;user = apache
user = www
;group = apache
group = www

再重啟php-fpm服務:

# service php-fpm stop
Stopping php-fpm:                                          [  OK  ]
# service php-fpm start
Starting php-fpm:                                          [  OK  ]

查看php-fpm進程:

# ps aux | grep php-fpm
root     20208  0.0  0.5 313272  5832 ?        Ss   23:13   0:00 php-fpm: master process (/etc/php-fpm.conf)
www      20209  0.4  1.0 316056 10388 ?        S    23:13   0:00 php-fpm: pool www
www      20210  0.3  0.9 315020  9280 ?        S    23:13   0:00 php-fpm: pool www
www      20211  0.4  1.0 316580 10764 ?        S    23:13   0:00 php-fpm: pool www
www      20212  0.4  1.0 316056 10388 ?        S    23:13   0:00 php-fpm: pool www
www      20213  0.0  0.4 313272  4872 ?        S    23:13   0:00 php-fpm: pool www
www      20215  0.0  0.4 313272  4876 ?        S    23:13   0:00 php-fpm: pool www
root     20217  0.0  0.0 103236   860 pts/0    S+   23:14   0:00 grep php-fpm

可以看到PHP-FPM進程的進程號是20208,其子進程都以www用戶身份運行,而grep php-fpm是查看進程這個命令的進程。

3.7 問題:登錄總是失敗,並重新返回到登錄頁面

錯誤日志為:

2014-06-14 23:14:36 Warning: Warning (2): Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/session) in [Unknown, line 0]

原因:PHP session目錄的所有者:組是apache:apache,而不是www:www,與實際進程運行的用戶身份不符。

更改PHP session目錄的所有者:組為www:www:

# chown -R www:www /var/lib/php/session

從此,王子和公主過著沒羞沒臊的生活!

A. 參考資料


centos55升級php到53,報如下錯誤:

問題人家說的很清楚了:

Error: Missing Dependency: php-api = 20041225 is needed by package php-sqlite3-0.4-1.mf.i386 (installed)

建議人家也給你了:
You could try using --skip-broken to work around the problem
You could try running: package-cleanup --problems
package-cleanup --dupes
rpm -Va --nofiles --nodigest

你缺少包:php-api
 

Centos58 怎把php5217升級到php533

centos5源裡面php默認最高就是5.2
如果你想用php5.3。又不想自己編譯安裝在某個普通用戶下面(切勿直接在root下編譯安裝替換系統的,會有很多問題的)
那還有一個選擇。就是安裝php53不過如果想裝好,可能得先把php卸載掉。
在root用戶下

yum remove php

然後再安裝php53及所有相關組件
yum install php53*
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved