用 yum 把服务器的 php 升级到 7

有个discuz论坛一直用的是php5.3.3,php7出来以后看到大片大片的好评,性能大幅度的提升,心里就种草了。正好discuz官方最近也从3.2连续升级到了3.3、3.4版本,解决了很多外部网络依赖导致卡死等历史问题,顺便又把php7也支持了,那就升级一把。

首先,把web服务都停掉

# service php-fpm stop
Stopping php-fpm:                                          [  OK  ]
# service nginx stop
Stopping nginx:                                            [  OK  ]

查一下当前安装的php模块和插件有哪些

# yum list installed | grep php
php.x86_64                         5.3.3-49.el6                        @os      
php-cli.x86_64                     5.3.3-49.el6                        @os      
php-common.x86_64                  5.3.3-49.el6                        @os      
php-devel.x86_64                   5.3.3-49.el6                        @os      
php-fpm.x86_64                     5.3.3-49.el6                        @os      
php-gd.x86_64                      5.3.3-49.el6                        @os      
php-mbstring.x86_64                5.3.3-49.el6                        @os      
php-mysql.x86_64                   5.3.3-49.el6                        @os      
php-pdo.x86_64                     5.3.3-49.el6                        @os      
php-pear.noarch                    1:1.9.4-5.el6                       @os      
php-pecl-apcu.x86_64               4.0.11-2.el6                        @epel    
php-pecl-igbinary.x86_64           1.2.1-1.el6                         @epel    
php-pecl-memcache.x86_64           3.0.5-4.el6                         @os      
php-pecl-redis.x86_64              2.2.8-1.el6                         @epel    
php-pecl-xhprof.x86_64             0.9.4-1.el6                         @epel    
php-xml.x86_64                     5.3.3-49.el6                        @os 

更新一下php7的rpm源.因为是centOS 6的系统,所以选择了el6这个:

# rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm
Retrieving http://mirror.webtatic.com/yum/el6/latest.rpm
warning: /var/tmp/rpm-tmp.vpifoH: Header V4 DSA/SHA1 Signature, key ID cf4c4ff9: NOKEY
Preparing...                ########################################### [100%]
   1:webtatic-release       ########################################### [100%]

因为涉及的模块太多,一个一个处理容易出错,自动生成个脚本来处理一下

# echo "yum remove -y \\">removephp.sh
# # yum list installed | grep php |sed "s/^\(php\\S*\).*$/\\1 \\\\/" >> removephp.sh

这样把需要卸载的5.3.3的模块都放进去了。

把php5.3.3卸载完了还要把对应的php7的模块安装回去,所以先生成一个安装脚本

# echo "yum install \\">installphp7.sh
 yum list installed | grep php |sed "s/^\(php\)\(\\S*\).*$/\\170w\\2 \\\\/" >>installphp7.sh 

不过不是所有的包都能够顺利升级的,要检查一下这些5.3.3的模块是不是都有对应的php7的包

# yum list installed | grep php |sed "s/^\(php\)\(\\S*\)\..*$/yum search \\170w\\2 |grep 'No Matches found'/" |sh
Warning: No matches found for: php70w-pecl-xhprof
No Matches found

发现pecl-xhprof这个包没有对应的php7版本,那就只能vi一下,把这个包从installphp7.sh 里面删除掉了。

好了,现在一切准备就绪,开始移除php5.3.3

# sh removephp.sh 
Loaded plugins: fastestmirror, security
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
...
...
Complete!

安装php7

# sh installphp7.sh 
Loaded plugins: fastestmirror, security
Setting up Install Process
Loading mirror speeds from cached hostfile
 * webtatic: uk.repo.webtatic.com
**No package php70w-pecl-memcache.x86_64 available.**
Resolving Dependencies
...
...
Install      15 Package(s)

Total download size: 12 M
Installed size: 50 M
Is this ok [y/N]: n

安装检查的时候报告了一个 No package php70w-pecl-memcache.x86_64 available 。可以先n以后修改installphp7.sh,再来也可以先y把其他的安装包都装好了再单独处理这个包。

检查一下这个包怎么了

yum search pecl-memcache

原来从PHP7开始,只支持pecl-memcached模块,不再支持古老的原生memcache模块了。可以修改一下installphp7.sh把memcache改成 memcached

# sed -i  "s/pecl-memcache/pecl-memcached/" installphp7.sh 
[root@VM_190_184_centos ~]# sh installphp7.sh 
Loaded plugins: fastestmirror, security
Setting up Install Process
Loading mirror speeds from cached hostfile
...
...
Install      17 Package(s)

Total download size: 13 M
Installed size: 51 M
Is this ok [y/N]: y
...
...
warning: rpmts_HdrFromFdno: Header V4 DSA/SHA1 Signature, key ID cf4c4ff9: NOKEY
...
...
Complete!

中间有部分安装包报告NOKEY的warning,似乎缺少签名,键入y跳过。

看看是不是安装成功了

# php -v
PHP 7.0.21 (cli) (built: Jul  6 2017 11:37:10) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies

试试启动一下服务

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

看起来蛮好。试试访问起来怎么样:

wget "http://localhost/index.php"
--2017-08-17 11:35:56--  http://localhost/index.php
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|... connected.
HTTP request sent, awaiting response... 502 Bad Gateway
2017-08-17 11:35:56 ERROR 502: Bad Gateway.

报告一个502错误,检查一下是什么问题:

# tail /var/log/nginx/error_log
2017/08/17 11:35:56 [crit] 14221#0: *70 connect() to unix:/tmp/php-fpm-www.sock failed (2: No such file or directory) while connecting to upstream, client: 127.0.0.1 ......

nginx通过socket转发php-fpm被拒了,看看php-fpm的监听配置

# grep '^listen' /etc/php-fpm.d/www.conf
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1

原来php变成默认的监听9000端口的方式了,那还是改为socket方式吧。

# touch /tmp/php-fpm-www.sock
# sed -i "s/^listen = 127.0.0.1:9000/listen = \/tmp\/php-fpm-www.sock/" /etc/php-fpm.d/www.conf 
# grep '^listen' /etc/php-fpm.d/www.conf
listen = /tmp/php-fpm-www.sock
listen.allowed_clients = 127.0.0.1
# service php-fpm restart
Stopping php-fpm:                                          [  OK  ]
Starting php-fpm:                                          [  OK  ]
# chmod 666 /tmp/php-fpm-www.sock
# wget "http://localhost/index.php"

--2017-08-17 11:49:44--  http://localhost/index.php
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: forum.php [following]
--2017-08-17 11:49:44--  http://localhost/forum.php
Connecting to localhost|127.0.0.1|... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]

至此web服务已经恢复,可以打开浏览器验证了。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据和云计算技术

Flume日志收集系统架构详解

任何一个生产系统在运行过程中都会产生大量的日志,日志往往隐藏了很多有价值的信息。在没有分析方法之前,这些日志存储一段时间后就会被清理。随着技术的发展和分析能力的...

4388
来自专栏杨建荣的学习笔记

两条报警信息的分析(第二篇)(r6笔记第71天)

还是继续分析报警信息的关联,下面两个看似没有直接联系的报警信息其实很有关联。 下面是主库的报警的信息,查看v$dataguard_status得到了最新的错误信...

3417
来自专栏一个会写诗的程序员的博客

《Spring Boot极简教程》第8章 Spring Boot集成Groovy,Grails开发第8章 Spring Boot集成Groovy,Grails开发小结参考资料

本章介绍Spring Boot集成Groovy,Grails开发。我们将开发一个极简版的pms(项目管理系统)。

1202
来自专栏V站

PHP5.4 + Zend Opcache 加速 wordpress 小结

五一期间,把 VPS 上的 PHP 加速组件换成了 Zend Opcache,打开页面的速度有了非常明显可以直接感受到的提升。这里顺便做一下小结,作为备忘。

2494
来自专栏bboysoul

linux 格式化硬盘

fdisk /dev/sda 输入o建立dos分区表 输入n建立一个新的分区 输入p建立一个主分区,或者输入e建立一个逻辑分区 之后输入分区号码mbr只...

1285
来自专栏一个会写诗的程序员的博客

第11章 Spring Boot应用监控第11章 Spring Boot应用监控小结

在实际的生产系统中,我们怎样知道我们的应用运行良好呢?我们往往需要对系统实际运行的情况(各种cpu,io,disk,db,业务功能等指标)进行监控运维。这需要耗...

2213
来自专栏一个会写诗的程序员的博客

8.2 Spring Boot集成Groovy、Grails开发小结参考资料

本章介绍Spring Boot集成Groovy,Grails开发。我们将开发一个极简版的pms(项目管理系统)。

933
来自专栏菩提树下的杨过

spring cloud 学习(1) - 基本的SOA示例

有过dubbo/dubbox使用经验的朋友,看到下面这张图,一定很熟悉,就是SOA架构的最基本套路。 ? 与dubbo对比,上图的3大要素中,spring cl...

2838
来自专栏菩提树下的杨过

spring cloud:Edgware.RELEASE版本hystrix超时新坑

升级到Edgware.RELEASE发现,zuul中不管如何设置hystrix的超时时间均不起作用,仍然是默认的1000ms.  降回低版本后正常,但是低版本的...

26010
来自专栏java一日一条

彻底理解 Android Binder 通信架构

roid 6.0的源码剖析, 本文深度剖析Binder IPC过程, 这绝对是一篇匠心巨作,从Java framework到Native,再到Linux Ker...

3842

扫码关注云+社区