centos下升級php5.3到php5.6

enet001發表於2018-01-18

檢視並刪除原有的php5.3

原文地址:http://blog.csdn.net/na_beginning/article/details/53414122

檢視原有的php版本:

php -V
  • 1
  • 2

檢視已經安裝的php的包:

yum list installed | grep php
  • 1
  • 2

可以看到如下原有的安裝包:

php-common.x86_64 0:5.3.3-38.el6   
php-gd.x86_64 0:5.3.3-38.el6        
php-ldap.x86_64 0:5.3.3-38.el6          
php-mysql.x86_64 0:5.3.3-38.el6    
php-odbc.x86_64 0:5.3.3-38.el6      
php-pdo.x86_64 0:5.3.3-38.el6           
php-pear.noarch 1:1.9.4-4.el6      
php-pecl-apc.x86_64 0:3.1.9-2.el6   
php-pecl-memcache.x86_64 0:3.0.5-4.el6  
php-pgsql.x86_64 0:5.3.3-38.el6    
php-soap.x86_64 0:5.3.3-38.el6      
php-xml.x86_64 0:5.3.3-38.el6           
php-xmlrpc.x86_64 0:5.3.3-38.el6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

全都是5.3.3-38.el6版本的。

如果不刪除原有的5.3的包,安裝php5.6的包時會報衝突的錯誤。

刪除5.3的包:

yum remove php.cli.x86_64 php-common.x86_64 php-gd.x86_64 php-ldap.x86_64 php-mysql.x86_64 php-odbc.x86_64 php-pdo.x86_64 php-pear.noarch php-pecl-apc.x86_64 php-pecl-memcache.x86_64 php-pgsql.x86_64 php-soap.x86_64 php-xml.x86_64 php-xmlrpc.x86_64
  • 1
  • 2

刪除後可以確認一下是否已經完成刪除:

yum list installed | grep php
  • 1
  • 2

結果應該為空。

安裝php5.6的包

由於centos 6.* 原有的rpm中不包含5.6的包的資源,所以需要先安裝匯入php的安裝源:

rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm
  • 1
  • 2

然後安裝5.6相關的包:

yum install php56w.x86_64 php56w-cli.x86_64 php56w-common.x86_64 php56w-gd.x86_64 php56w-ldap.x86_64 php56w-mbstring.x86_64 php56w-mysql.x86_64 php56w-pdo.x86_64 php56w-odbc.x86_64 php56w-xml.x86_64 php56w-xmlrpc.x86_64 php56w-soap.x86_64
  • 1
  • 2

全部安裝成功後確認一下:

yum list installed | grep php
  • 1
  • 2

結果如下:

php56w.x86_64            5.6.27-1.w6    @webtatic                               
php56w-cli.x86_64        5.6.27-1.w6    @webtatic                               
php56w-common.x86_64     5.6.27-1.w6    @webtatic                               
php56w-gd.x86_64         5.6.27-1.w6    @webtatic                               
php56w-ldap.x86_64       5.6.27-1.w6    @webtatic                               
php56w-mbstring.x86_64   5.6.27-1.w6    @webtatic                               
php56w-mysql.x86_64      5.6.27-1.w6    @webtatic                               
php56w-odbc.x86_64       5.6.27-1.w6    @webtatic                               
php56w-pdo.x86_64        5.6.27-1.w6    @webtatic                               
php56w-soap.x86_64       5.6.27-1.w6    @webtatic                               
php56w-xml.x86_64        5.6.27-1.w6    @webtatic                               
php56w-xmlrpc.x86_64     5.6.27-1.w6    @webtatic
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

重啟php-fpm:

/usr/local/php/sbin/php-fpm restart
  • 1
  • 2

然後執行:

php -v
  • 1
  • 2

應當顯示 5.6.

升級完畢。

不過存在一個疑問:

直接在伺服器執行php -v的版本是5.6,但是在nginx伺服器寫一個info.php,內容如下:

<?php
    phpinfo();
?>
  • 1
  • 2
  • 3
  • 4

然後再瀏覽器訪問:http://ip:port/info.php,顯示的頁面卻還是舊的5.3版本。這個問題還沒有搞清楚。

對於上述疑問,追蹤進展為:

上面雖然刪除安裝了php的依賴包,但是舊的php版本本身沒有刪除,也就是說centos上存在兩個版本的php,升級php依賴包後,執行 php
-v 只不過系統訪問的路徑預設訪問的是5.6版本的包,但是通過其他應用,比如nginx去訪問的時候訪問的還是舊的5.2版本的php。

檢查過程如下:
執行php -v: 5.6

檢視系統所有版本的php:

find / -name php
  • 1
  • 2

顯示結果中可以找到下面兩個命令:

/usr/local/php/bin/php
/etc/bin/php
  • 1
  • 2
  • 3

分別執行 /usr/local/php/bin/php -v 和 /etc/bin/php -v 可以看到,一個是5.2版本,一個是5.6版本,這就是為什麼上面php -v 看到的是5.6版本,而phpinfo看到的是5.2版本的直接原因。
根本原因:通過nginx訪問php請求,nginx轉發到127.0.0.1:9000,監聽9000埠的php-fpm接收到請求後,將請求轉交給對應的php直譯器進行處理,也就是說使用的是哪個版本的php是由php-fpm決定,而php-fpm只是php的一個補丁,通過編譯安裝php時configure時加上引數
–enable-fpm
安裝php-fpm,所以安裝php時就已經決定了php-fpm呼叫的是哪一個版本的php,如果需要改變使用的php版本,只能重新下載更新版本的php原始碼,然後重新編譯安裝帶上–enable-fpm引數,這樣才能成功改變phpinfo()顯示的版本。

重新安裝php5.6的方法參考linux安裝nginx和mysql和php.md。

另外,想要找到系統採用的當前php.ini配置檔案的話,可以通過下面的方式查詢:

find / -name php.ini
  • 1
  • 2

這樣可能會顯示多個php.ini路徑,然後執行如下命令可以獲取當前被系統採用的php.ini配置檔案:

php -i | grep php.ini


相關文章