从 PHP 7.0 升级到 PHP 7.1


作者: 我不是鱼 (2016-12-05 14:38) 分类: PHP   标签: PHP 7.1 升级到 PHP 7.1 PHP7升级

在 PHP 7.0 发布一年之后,终于看到 PHP 7.1 稳定版发布,有不少新特性,迫不及待地想尝试一下这个版本。本文是介绍从 PHP 7.0.5 升级到 PHP 7.1.0,如果是新安装,可以参考这里:http://www.lnmp.cn/installing-php7-mysql57-nginx18-under-centos7.html 大同小异

PHP 7.0.5 之前是安装在  /usr/local/php-7.0.5

首先下载源码,我一般都是放在 /usr/local/src 中

[root@lnmp lnmp.cn]# cd /usr/local/src
[root@lnmp src]# wget -c http://cn2.php.net/get/php-7.1.0.tar.gz/from/this/mirror -O php-7.1.0.tar.gz

然后解压并进入解压后的源码目录

[root@lnmp src]# tar -zxvf php-7.1.0.tar.gz
[root@lnmp src]# cd php-7.1.0/


接下来开始安装了,可以先关闭 php-fpm, 也可以不关闭,其实没有关系。

既然是升级,为了不影响现有网站在升级后的正常运行,那就要做到升级后的 configure 和之前的版本基本一致。这就要把之前安装 PHP 的 configure 找出来,如果你忘记了之前的 configure (应该也没有人去记它吧),其实它就在 phpinfo 里边

[root@lnmp php-7.1.0]# php -i | grep configure
Configure Command =>  './configure'  '--prefix=/usr/local/php-7.0.5' '--enable-fpm' '--with-fpm-user=nginx' '--with-fpm-group=nginx' '--with-mysqli' '--with-zlib' '--with-curl' '--with-gd' '--with-jpeg-dir' '--with-png-dir' '--with-freetype-dir' '--with-openssl' '--enable-mbstring' '--enable-xml' '--enable-session' '--enable-ftp' '--enable-pdo' '-enable-tokenizer' '--enable-zip'

稍作替换就可以得到想要的 configure 命令了

[root@lnmp php-7.1.0]# php -i | grep configure | sed -e "s/Configure Command =>  //; s/'//g"
./configure  --prefix=/usr/local/php-7.0.5 --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-mysqli --with-zlib --with-curl --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-openssl --enable-mbstring --enable-xml --enable-session --enable-ftp --enable-pdo -enable-tokenizer --enable-zip
[root@lnmp php-7.1.0]#

当然也可以从 php-config 命令获取 configure 选项

这个这里要特别提到一下就是,如果之前的 PHP 版本在安装后有用 PECL 或 phpize 新增过扩展的话,如果这些扩展可以加到 configure 里边,尽量加,否则安装后还要重新安装一次这些扩展

开始安装, 安装到 /usr/local/php-7.1.0

[root@lnmp php-7.1.0]# ./configure  --prefix=/usr/local/php-7.1.0 --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-mysqli --with-zlib --with-curl --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-openssl --enable-mbstring --enable-xml --enable-session --enable-ftp --enable-pdo -enable-tokenizer --enable-zip

如果成功的话,可以看到有 Thank you for using PHP. 的字样

接着 make

[root@lnmp php-7.1.0]# make

视机子配置不同,编译可能会要点时间。最后是

[root@lnmp php-7.1.0]# make install

至此,PHP 7.1 已经安装基本完成

[root@lnmp php-7.1.0]# /usr/local/php-7.1.0/bin/php -v
PHP 7.1.0 (cli) (built: Dec  5 2016 04:09:57) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.1.0-dev, Copyright (c) 1998-2016 Zend Technologies
[root@lnmp php-7.1.0]#

下面是配置,为了不影响现有网站的运行,这里将沿用 PHP 7.0 的配置,直接从备份的文件夹拷贝过去

[root@lnmp php-7.1.0]# cp /usr/local/php-7.0.5/lib/php.ini /usr/local/php-7.1.0/lib/php.ini
[root@lnmp php-7.1.0]# cp /usr/local/php-7.0.5/etc/php-fpm.conf /usr/local/php-7.1.0/etc/php-fpm.conf
[root@lnmp php-7.1.0]# cp /usr/local/php-7.0.5/etc/php-fpm.d/www.conf /usr/local/php-7.1.0/etc/php-fpm.d/www.conf

之前有特别提到有用 PECL 或 phpize 新增过扩展的话,因为拷贝过来的  php.ini 中已经引入了那些扩展,在这里要重新安装,否则在重启 php-fpm 时会出现类似警报:

Dec 05 04:18:53 localhost.localdomain php-fpm[11533]: [05-Dec-2016 04:18:53] NOTICE: PHP message: PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/php-7.1.0/lib/php/extensions/no-debug-non-zts-20160303/memcached.so' - /usr/local/php-7.1.0/lib/php/extensions/no-debug-non-zts-20160303/memcached.so: cannot open shared object file: No such file or directory in Unknown on line 0

是要重新安装,即便从旧版本中将这些 so 文件拷贝过来也不行,否则会出现不匹配的警告:

Dec 05 05:07:42 localhost.localdomain php-fpm[11672]: [05-Dec-2016 05:07:42] NOTICE: PHP message: PHP Warning:  PHP Startup: memcache: Unable to initialize module

如果已经忘记过安装过什么扩展,可以查看 php.ini 或扩展目录:

[root@lnmp no-debug-non-zts-20151012]# /usr/local/php-7.0.5/bin/php-config --extension-dir
/usr/local/php-7.0.5/lib/php/extensions/no-debug-non-zts-20151012

查看安装了哪些扩展

[root@lnmp php-7.1.0]# ls /usr/local/php-7.0.5/lib/php/extensions/no-debug-non-zts-20151012
memcache.so  memcached.so  opcache.a  opcache.so  pdo_mysql.so

其中 opcache.a  opcache.so 是自带的,其他都是新增的。其他扩展之前怎么安装,现在又怎么重新安装一遍吧,这里不再累述。

 

配置 php-fpm 启动服务脚本

[root@lnmp php-7.1.0]# cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/php-fpm-710.service

命名为 php-fpm-710.service 是为了方便后面升级,网站如果出问题也很方便切换会 php 7.0 

修改启动脚本,把里边 prefix 相关的内容用实际路径代替(如果已经是正确的绝对路径,那就不需要修改)

[root@lnmp php-7.1.0]# vim /usr/lib/systemd/system/php-fpm-710.service

PIDFile=${prefix}/var/run/php-fpm.pid
ExecStart=${exec_prefix}/sbin/php-fpm --nodaemonize --fpm-config ${prefix}/etc/php-fpm.conf

修改成

PIDFile=/usr/local/php-7.0.5/var/run/php-fpm.pid
ExecStart=/usr/local/php-7.0.5/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php-7.0.5/etc/php-fpm.conf

 

在切换到 PHP 7.1.0 之前,先将 php-fpm 关闭

[root@lnmp php-7.1.0]# systemctl stop php-fpm


修改软链:

一个是 /usr/local/php,

[root@lnmp php-7.1.0]# unlink /usr/local/php
[root@lnmp php-7.1.0]# ln -s /usr/local/php-7.1.0 /usr/local/php


一个是 /usr/lib/systemd/system/php-fpm.service :

[root@lnmp php-7.1.0]# unlink /usr/lib/systemd/system/php-fpm.service
[root@lnmp php-7.1.0]# ln -s /usr/lib/systemd/system/php-fpm-710.service /usr/lib/systemd/system/php-fpm.service


重新加载服务

[root@lnmp php-7.1.0]# systemctl daemon-reload


好了之后启动 php-fpm

[root@lnmp php-7.1.0]# systemctl start php-fpm

查看状态

[root@lnmp php-7.1.0]# systemctl status php-fpm -l
● php-fpm.service - The PHP FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2016-12-05 05:31:22 UTC; 9s ago
 Main PID: 17367 (php-fpm)
   CGroup: /system.slice/php-fpm.service
           ├─17367 php-fpm: master process (/usr/local/php-7.1.0/etc/php-fpm.conf)
           ├─17368 php-fpm: pool www
           └─17369 php-fpm: pool www

已经正常运行,测试下 phpinfo 页面

大功告成。另外如果在使用 PHP 7.1 的同时又想保留 PHP 7.0 版本,可以参考这里:http://www.lnmp.cn/multiple-php-versions-under-lnmp.html

前一篇: MySQL 5.7 新特性 JSON 的创建,插入,查询,更新
后一篇: Vagrant, Installing Virtualbox Guest Additions 5.0.30 - guest version is unknown


添加评论

昵称:


验证码