centos下升级php5.3到php5.6

Talk is cheap,show me the code.

查看并删除原有的PHP5.3

查看原有的PHP版本:

PHP -V

查看已经安装的PHP的包:

yum list installed | grep PHP

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

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

全都是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

删除后可以确认一下是否已经完成删除

yum list installed | grep PHP

结果应该为空。

安装PHP5.6的包

由于centos 6.* 原有的rpm中不包含5.6的包的资源,所以需要先安装导入PHP的安装源:

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

然后安装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

全部安装成功后确认一下:

yum list installed | grep PHP

结果如下:

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

重启PHP-fpm:

/usr/local/PHP/sbin/PHP-fpm restart

后执行

PHP -v

应当显示 5.6.

升级完毕。

不过存在一个疑问:

直接在服务器执行PHP -v的版本是5.6,但是在Nginx服务器写一个info.PHP内容如下:

<?PHP
    PHPinfo();
?>

然后再浏览器访问: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

显示结果中可以找到下面两个命令:

/usr/local/PHP/bin/PHP
/etc/bin/PHP

分别执行 /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安装NginxMysqLPHP.md。

另外,想要找到系统采用的当前PHP.ini配置文件的话,可以通过下面的方式查找:

find / -name PHP.ini

这样可能会显示多个PHP.ini路径,然后执行如下命令可以获取当前被系统采用的PHP.ini配置文件

PHP -i | grep PHP.ini

相关文章

Centos下搭建性能监控Spotlight
CentOS 6.3下Strongswan搭建IPSec VPN
在CentOS6.5上安装Skype与QQ
阿里云基于centos6.5主机VPN配置
CentOS 6.3下配置multipah
CentOS安装、配置APR和tomcat-native